Algoritmuselmélet 4. el ˝ oadás
Katona Gyula Y.
Budapesti M ˝uszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz.
I. B. 137/b
kiskat@cs.bme.hu
2002 Február 25.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 2
AVL-fák
G. M. Adelszon-Velszkij, E. M. Landisz, 1962 =⇒ kiegyensúlyozott bináris keres ˝ofa
egy csúcsa; ekkor m(x) jelöli az x-gyöker ˝u részfa magasságát.
Definíció (AVL-tulajdonság). Egy bináris keres ˝ofa AVL-fa, ha minden x csúcsára teljesül, hogy
|m(bal(x)) − m(jobb(x))| ≤ 1.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 2
AVL-fák
G. M. Adelszon-Velszkij, E. M. Landisz, 1962 =⇒ kiegyensúlyozott bináris keres ˝ofa
Jelölje m(f) az f bináris fa magasságát (szintjeinek számát), ha x az f fa egy csúcsa; ekkor m(x) jelöli az x-gyöker ˝u részfa magasságát.
Definíció (AVL-tulajdonság). Egy bináris keres ˝ofa AVL-fa, ha minden x csúcsára teljesül, hogy
|m(bal(x)) − m(jobb(x))| ≤ 1.
Mekkora a k szint ˝u AVL-fa minimális csúcsszáma?
egy csúcsa; ekkor m(x) jelöli az x-gyöker ˝u részfa magasságát.
Definíció (AVL-tulajdonság). Egy bináris keres ˝ofa AVL-fa, ha minden x csúcsára teljesül, hogy
|m(bal(x)) − m(jobb(x))| ≤ 1.
Mekkora a k szint ˝u AVL-fa minimális csúcsszáma?
~
T T
T T
TT B
B B
B BB
~
~
~
~
~
~
T
T T
T TT
B B
B B
BB
~
~
~
~ e
e e e ee
~
~
~
G4 = 7 G3 = 4
G2 = 2 G1 = 1
ALGORITMUSELMÉLET 4. EL ˝OADÁS 3
A k szintszámú minimális csúcsszámú AVL-fa gyökerének egyik részfája k − 1, a másik k − 2 szint ˝u; az eredeti fa minimalitása miatt pedig mindkét részfa minimális csúcsszámú.
k−1 k−2
k
k−1 k−2 k
=⇒ rekurzió
Gk = 1 + Gk−1 + Gk−2.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 3
A k szintszámú minimális csúcsszámú AVL-fa gyökerének egyik részfája k − 1, a másik k − 2 szint ˝u; az eredeti fa minimalitása miatt pedig mindkét részfa minimális csúcsszámú.
k−1 k−2
k
=⇒ rekurzió
Gk = 1 + Gk−1 + Gk−2. Tétel. Gk = Fk+2 − 1 ha k ≥ 1.
k−1 k−2 k
=⇒ rekurzió
Gk = 1 + Gk−1 + Gk−2. Tétel. Gk = Fk+2 − 1 ha k ≥ 1.
Bizonyítás: k = 1, 2
√
=⇒ indukció:
Gk = 1 + Gk−1 + Gk−2 = 1 + Fk+1 − 1 + Fk − 1 = Fk+2 − 1.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 4
Tétel. Egy n-pontú AVL-fa szintjeinek k száma nem több mint O(log n), pontosabban k ≤ 1.44 log2(n + 1).
ALGORITMUSELMÉLET 4. EL ˝OADÁS 4
Tétel. Egy n-pontú AVL-fa szintjeinek k száma nem több mint O(log n), pontosabban k ≤ 1.44 log2(n + 1).
Bizonyítás: tétel =⇒ n ≥ Fk+2 − 1
Fibonacci-számokra vonatkozó alsó becslésb ˝ol n + 1 ≥ φk
=⇒ logφ(n + 1) ≥ k =⇒ k ≤ 1.44 log2(n + 1)
ALGORITMUSELMÉLET 4. EL ˝OADÁS 5
Az AVL-tulajdonság meg ˝ orzése
Hogyan lehet a BESZÚR és TÖRÖL eljárásokat úgy megvalósítani, hogy megtartsák az AVL-tulajdonságot?
ALGORITMUSELMÉLET 4. EL ˝OADÁS 5
Az AVL-tulajdonság meg ˝ orzése
Hogyan lehet a BESZÚR és TÖRÖL eljárásokat úgy megvalósítani, hogy megtartsák az AVL-tulajdonságot? =⇒ forgatás
jobb forgatás bal forgatás
f g
h
g f
h y
x
x y
jobb forgatás bal forgatás
f g
h
g f
h y
x
x y
dupla forgatás
g h
f
i
g i
f h
y
x
z
z
y x
ALGORITMUSELMÉLET 4. EL ˝OADÁS 6
Tétel. Legyen S egy n csúcsból álló AVL-fa. BESZÚR(s, S) után legfeljebb egy (esetleg dupla) forgatással helyreállítható az AVL-tulajdonság. A
beszúrás költsége ezzel együtt is O(log n).
ALGORITMUSELMÉLET 4. EL ˝OADÁS 6
Tétel. Legyen S egy n csúcsból álló AVL-fa. BESZÚR(s, S) után legfeljebb egy (esetleg dupla) forgatással helyreállítható az AVL-tulajdonság. A
beszúrás költsége ezzel együtt is O(log n).
Bizonyítás: Minden csúcsban tartsuk számon m(f)-et, az f gyöker ˝u részfa mélységét, ez könnyen karban tartható.
KERES(s, S) segítségével megkeressük s helyét.
KERES(s, S) segítségével megkeressük s helyét.
A keresési utat végigjárva megkeressük a legalsó olyan csúcsot, ahol sérül az AVL-tulajdonság =⇒ x
s
s
keresési út
nagyítva
l l−1
f g
h h h’
x
y
x
ALGORITMUSELMÉLET 4. EL ˝OADÁS 6
Tétel. Legyen S egy n csúcsból álló AVL-fa. BESZÚR(s, S) után legfeljebb egy (esetleg dupla) forgatással helyreállítható az AVL-tulajdonság. A
beszúrás költsége ezzel együtt is O(log n).
Bizonyítás: Minden csúcsban tartsuk számon m(f)-et, az f gyöker ˝u részfa mélységét, ez könnyen karban tartható.
KERES(s, S) segítségével megkeressük s helyét.
A keresési utat végigjárva megkeressük a legalsó olyan csúcsot, ahol sérül az AVL-tulajdonság =⇒ x
s
s
keresési út
nagyítva
l l−1
f g
h h h’
x
y
x
x definíciója =⇒ m(h0) 6= m(h)
KERES(s, S) segítségével megkeressük s helyét.
A keresési utat végigjárva megkeressük a legalsó olyan csúcsot, ahol sérül az AVL-tulajdonság =⇒ x
s
s
keresési út
nagyítva
l l−1
f g
h h h’
x
y
x
x definíciója =⇒ m(h0) 6= m(h)
feltehetjük, hogy m(h0) = l, m(h) = l − 1
ALGORITMUSELMÉLET 4. EL ˝OADÁS 6
Tétel. Legyen S egy n csúcsból álló AVL-fa. BESZÚR(s, S) után legfeljebb egy (esetleg dupla) forgatással helyreállítható az AVL-tulajdonság. A
beszúrás költsége ezzel együtt is O(log n).
Bizonyítás: Minden csúcsban tartsuk számon m(f)-et, az f gyöker ˝u részfa mélységét, ez könnyen karban tartható.
KERES(s, S) segítségével megkeressük s helyét.
A keresési utat végigjárva megkeressük a legalsó olyan csúcsot, ahol sérül az AVL-tulajdonság =⇒ x
s
s
keresési út
nagyítva
l l−1
f g
h h h’
x
y
x
x definíciója =⇒ m(h0) 6= m(h)
feltehetjük, hogy m(h0) = l, m(h) = l − 1
Két eset van:
a) s az f részfába kerül b) s a g részfába kerül
s
s
ALGORITMUSELMÉLET 4. EL ˝OADÁS 7
s
f g s
h
g f
h y
x
x
y a) eset:
m(f) < m(g) =⇒ x-ben nem sérül az AVL-tul.
s
s
ALGORITMUSELMÉLET 4. EL ˝OADÁS 7
s
f g s
h
g f
h y
x
x
y a) eset:
m(f) < m(g) =⇒ x-ben nem sérül az AVL-tul.
m(f) > m(g) =⇒ y-ben is sérül az AVL-tul.
=⇒
m(f) = m(g) = m(h) =
= m(y) − 1 = l − 1
s
s m(f) = m(g) = m(h) =
= m(y) − 1 = l − 1
=⇒ jobb forgatás helyre állítja az AVL-tul.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 7
s
f g s
h
g f
h y
x
x
y a) eset:
m(f) < m(g) =⇒ x-ben nem sérül az AVL-tul.
m(f) > m(g) =⇒ y-ben is sérül az AVL-tul.
=⇒
m(f) = m(g) = m(h) =
= m(y) − 1 = l − 1
=⇒ jobb forgatás helyre állítja az AVL-tul.
A forgatás után y mindkét részfájának a magassága l lesz, x új részfái g és h, mindkett ˝o szintszáma l − 1.
s
s m(f) = m(g) = m(h) =
= m(y) − 1 = l − 1
=⇒ jobb forgatás helyre állítja az AVL-tul.
A forgatás után y mindkét részfájának a magassága l lesz, x új részfái g és h, mindkett ˝o szintszáma l − 1.
y feletti csúcsok magassága nem változik, így az AVL-feltétel feljebb is megmarad a keres ˝o út mentén.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 8
b1) eset: s a g részfába került és s az y csúcs fia (l = 1)
s
y y x
ALGORITMUSELMÉLET 4. EL ˝OADÁS 9
b2) eset: s a g részfába került és s nem az y csúcs fia (l > 1)
s
g’ g’’
s
f
h g’ g’’
f h
z
ALGORITMUSELMÉLET 4. EL ˝OADÁS 9
b2) eset: s a g részfába került és s nem az y csúcs fia (l > 1)
s
g’ g’’
s
f
h g’ g’’
f h
y
x
z
y x
z
=⇒ m(f) = l − 1 (mert y-ban az AVL-tul. teljesül), és
m(g0) = m(g00) = l − 2 (mert z-ben sincs baj az AVL-tulajdonsággal)
s
g’ g’’
s
f
h g’ g’’
f h
z
=⇒ m(f) = l − 1 (mert y-ban az AVL-tul. teljesül), és
m(g0) = m(g00) = l − 2 (mert z-ben sincs baj az AVL-tulajdonsággal)
=⇒ dupla forgatás elég
ALGORITMUSELMÉLET 4. EL ˝OADÁS 9
b2) eset: s a g részfába került és s nem az y csúcs fia (l > 1)
s
g’ g’’
s
f
h g’ g’’
f h
y
x
z
y x
z
=⇒ m(f) = l − 1 (mert y-ban az AVL-tul. teljesül), és
m(g0) = m(g00) = l − 2 (mert z-ben sincs baj az AVL-tulajdonsággal)
=⇒ dupla forgatás elég
Költség: 1.44 log2(n + 1) = O(log n)
ALGORITMUSELMÉLET 4. EL ˝OADÁS 10
Törlés AVL-fából
Tétel. Az n pontú AVL-fából való naiv törlés után legfeljebb 1.44 log2 n (szimpla vagy dupla) forgatás helyreállítja az AVL-tulajdonságot.
Nem bizonyítjuk, a módszer hasonló, de nem mindig elég egy forgatás. Pl.:
Java animáció: AVL-fa
ALGORITMUSELMÉLET 4. EL ˝OADÁS 11
További kiegyensúlyozott fák
Az AVL-tulajdonság csak egy a lehetséges kiegyensúlyozottsági feltételek közül.
Legyen k ≥ 1 egy egész szám. Egy bináris keres ˝ofa HB[k]-fa, ha minden x csúcsára teljesül, hogy
|m(bal(x)) − m(jobb(x))| ≤ k.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 11
További kiegyensúlyozott fák
Az AVL-tulajdonság csak egy a lehetséges kiegyensúlyozottsági feltételek közül. Általánosítása:
Definíció. HB[k]-fák: (C. C. Foster, 1973)
Legyen k ≥ 1 egy egész szám. Egy bináris keres ˝ofa HB[k]-fa, ha minden x csúcsára teljesül, hogy
|m(bal(x)) − m(jobb(x))| ≤ k.
=⇒ HB[1]-fák → AVL-fák
ALGORITMUSELMÉLET 4. EL ˝OADÁS 12
Súlyra kiegyensúlyozott fák
A részfák súlya legyen a csúcsszámuk: s(f).
Definíció. Egy bináris keres ˝ofát súlyra kiegyensúlyozott fának (röviden SK-fának) nevezünk, ha minden x bels ˝o csúcsára teljesül, hogy
√2 − 1 < s(bal(x))
s(jobb(x)) < √
2 + 1.
√2 − 1 < s(bal(x))
s(jobb(x)) < √
2 + 1.
Feladat: Igazoljuk, hogy a leheletnyivel szigorúbb 1/2 < s(jobb(x))s(bal(x)) < 2 korlátokat már csak az l szintb ˝ol álló 2l − 1 pontú bináris fák a teljesítik.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 12
Súlyra kiegyensúlyozott fák
A részfák súlya legyen a csúcsszámuk: s(f).
Definíció. Egy bináris keres ˝ofát súlyra kiegyensúlyozott fának (röviden SK-fának) nevezünk, ha minden x bels ˝o csúcsára teljesül, hogy
√2 − 1 < s(bal(x))
s(jobb(x)) < √
2 + 1.
Feladat: Igazoljuk, hogy a leheletnyivel szigorúbb 1/2 < s(jobb(x))s(bal(x)) < 2 korlátokat már csak az l szintb ˝ol álló 2l − 1 pontú bináris fák a teljesítik.
Tétel. Egy n csúcsú SK-fa mélysége ≤ 2 log2 n + 1.
Bizonyítás:
x
y z
√2 − 1 < s(bal(x))
s(jobb(x)) < √
2 + 1.
Feladat: Igazoljuk, hogy a leheletnyivel szigorúbb 1/2 < s(jobb(x))s(bal(x)) < 2 korlátokat már csak az l szintb ˝ol álló 2l − 1 pontú bináris fák a teljesítik.
Tétel. Egy n csúcsú SK-fa mélysége ≤ 2 log2 n + 1.
Bizonyítás:
x
y z
s(x) > s(y) +s(z) > s(y) + (√
2−1)s(y) = √
2s(y)
ALGORITMUSELMÉLET 4. EL ˝OADÁS 12
Súlyra kiegyensúlyozott fák
A részfák súlya legyen a csúcsszámuk: s(f).
Definíció. Egy bináris keres ˝ofát súlyra kiegyensúlyozott fának (röviden SK-fának) nevezünk, ha minden x bels ˝o csúcsára teljesül, hogy
√2 − 1 < s(bal(x))
s(jobb(x)) < √
2 + 1.
Feladat: Igazoljuk, hogy a leheletnyivel szigorúbb 1/2 < s(jobb(x))s(bal(x)) < 2 korlátokat már csak az l szintb ˝ol álló 2l − 1 pontú bináris fák a teljesítik.
Tétel. Egy n csúcsú SK-fa mélysége ≤ 2 log2 n + 1.
Bizonyítás:
x
y z
s(x) > s(y) +s(z) > s(y) + (√
2−1)s(y) = √
2s(y) Legyenek x1, x2, . . . , xk egy k-hosszúságú gyökért ˝ol levélig men ˝o út csúcsai.
√2 − 1 < s(bal(x))
s(jobb(x)) < √
2 + 1.
Feladat: Igazoljuk, hogy a leheletnyivel szigorúbb 1/2 < s(jobb(x))s(bal(x)) < 2 korlátokat már csak az l szintb ˝ol álló 2l − 1 pontú bináris fák a teljesítik.
Tétel. Egy n csúcsú SK-fa mélysége ≤ 2 log2 n + 1.
Bizonyítás:
x
y z
s(x) > s(y) +s(z) > s(y) + (√
2−1)s(y) = √
2s(y) Legyenek x1, x2, . . . , xk egy k-hosszúságú gyökért ˝ol levélig men ˝o út csúcsai.
n = s(x1) > √
2s(x2) > (√
2)2s(x3) > · · · >
(√
2)k−1s(xk) = (√
2)k−1 = 2(k−1)/2.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 12
Súlyra kiegyensúlyozott fák
A részfák súlya legyen a csúcsszámuk: s(f).
Definíció. Egy bináris keres ˝ofát súlyra kiegyensúlyozott fának (röviden SK-fának) nevezünk, ha minden x bels ˝o csúcsára teljesül, hogy
√2 − 1 < s(bal(x))
s(jobb(x)) < √
2 + 1.
Feladat: Igazoljuk, hogy a leheletnyivel szigorúbb 1/2 < s(jobb(x))s(bal(x)) < 2 korlátokat már csak az l szintb ˝ol álló 2l − 1 pontú bináris fák a teljesítik.
Tétel. Egy n csúcsú SK-fa mélysége ≤ 2 log2 n + 1.
Bizonyítás:
x
y z
s(x) > s(y) +s(z) > s(y) + (√
2−1)s(y) = √
2s(y) Legyenek x1, x2, . . . , xk egy k-hosszúságú gyökért ˝ol levélig men ˝o út csúcsai.
n = s(x1) > √
2s(x2) > (√
2)2s(x3) > · · · >
(√
2)k−1s(xk) = (√
2)k−1 = 2(k−1)/2.
=⇒
√
ALGORITMUSELMÉLET 4. EL ˝OADÁS 13
S-fák
Splay-tree: D. D. Sleator és R. E. Tarjan, 1983.
Olyan bináris fa, ami tanul: pl. gyakran keresett elemet feljebb teszi.
lesz.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 13
S-fák
Splay-tree: D. D. Sleator és R. E. Tarjan, 1983.
Olyan bináris fa, ami tanul: pl. gyakran keresett elemet feljebb teszi.
=⇒ Hosszú átlagos m ˝uveletsor alatt az egy lépésre es ˝o költség optimális lesz.
F ˝o öltlet:
KIFORDÍT(x, f) átszervezi az f S-fát úgy, hogy x lesz az új gyökér, ha x ∈ f; különben f gyökere x valamelyik szomszédja lesz:
vagy max{y ∈ f; y < x} vagy min{y ∈ f; y > x}.
lesz.
F ˝o öltlet:
KIFORDÍT(x, f) átszervezi az f S-fát úgy, hogy x lesz az új gyökér, ha x ∈ f; különben f gyökere x valamelyik szomszédja lesz:
vagy max{y ∈ f; y < x} vagy min{y ∈ f; y > x}.
KIFORDÍT(x, f) implementációja: KERES(x, f) =⇒ ha x ∈ f, akkor majd x-et visszük fel,
ALGORITMUSELMÉLET 4. EL ˝OADÁS 13
S-fák
Splay-tree: D. D. Sleator és R. E. Tarjan, 1983.
Olyan bináris fa, ami tanul: pl. gyakran keresett elemet feljebb teszi.
=⇒ Hosszú átlagos m ˝uveletsor alatt az egy lépésre es ˝o költség optimális lesz.
F ˝o öltlet:
KIFORDÍT(x, f) átszervezi az f S-fát úgy, hogy x lesz az új gyökér, ha x ∈ f; különben f gyökere x valamelyik szomszédja lesz:
vagy max{y ∈ f; y < x} vagy min{y ∈ f; y > x}.
KIFORDÍT(x, f) implementációja: KERES(x, f) =⇒ ha x ∈ f, akkor majd x-et visszük fel, ha x 6∈ f, akkor a keresés x egyik szomszédjánál
(max{y ∈ f; y < x} vagy min{y ∈ f; y > x}) ér véget, vegyük ezt.
lesz.
F ˝o öltlet:
KIFORDÍT(x, f) átszervezi az f S-fát úgy, hogy x lesz az új gyökér, ha x ∈ f; különben f gyökere x valamelyik szomszédja lesz:
vagy max{y ∈ f; y < x} vagy min{y ∈ f; y > x}.
KIFORDÍT(x, f) implementációja: KERES(x, f) =⇒ ha x ∈ f, akkor majd x-et visszük fel, ha x 6∈ f, akkor a keresés x egyik szomszédjánál
(max{y ∈ f; y < x} vagy min{y ∈ f; y > x}) ér véget, vegyük ezt.
=⇒ feltehetjük, hogy x ∈ f.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 14
A következ ˝o eljárás x-et maximum két szinttel viszi feljebb, addig alkalmazzuk, amig x felér.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 14
A következ ˝o eljárás x-et maximum két szinttel viszi feljebb, addig alkalmazzuk, amig x felér.
(0) Ha x gyökér, akkor készen vagyunk.
(* A továbbiakban jelölje y az x apját. *)
(1) Ha x-nek nincs nagyapja, akkor FORGAT(x), különben
(1) Ha x-nek nincs nagyapja, akkor FORGAT(x), különben
(2) ha x és y is baloldali (jobboldali) gyerek,
ALGORITMUSELMÉLET 4. EL ˝OADÁS 14
A következ ˝o eljárás x-et maximum két szinttel viszi feljebb, addig alkalmazzuk, amig x felér.
(0) Ha x gyökér, akkor készen vagyunk.
(* A továbbiakban jelölje y az x apját. *)
(1) Ha x-nek nincs nagyapja, akkor FORGAT(x), különben
(2) ha x és y is baloldali (jobboldali) gyerek,x y
z y
x z
x y
z
(1) Ha x-nek nincs nagyapja, akkor FORGAT(x), különben
(2) ha x és y is baloldali (jobboldali) gyerek,x y
z y
x z
x y
z akkor FORGAT(y), majd FORGAT(x), különben
(3) ha x és y különböz ˝o oldali gyerekek,
akkor FORGAT(x), majd ismét FORGAT(x).
ALGORITMUSELMÉLET 4. EL ˝OADÁS 14
A következ ˝o eljárás x-et maximum két szinttel viszi feljebb, addig alkalmazzuk, amig x felér.
(0) Ha x gyökér, akkor készen vagyunk.
(* A továbbiakban jelölje y az x apját. *)
(1) Ha x-nek nincs nagyapja, akkor FORGAT(x), különben
(2) ha x és y is baloldali (jobboldali) gyerek,x y
z y
x z
x y
z akkor FORGAT(y), majd FORGAT(x), különben
(3) ha x és y különböz ˝o oldali gyerekek,
akkor FORGAT(x), majd ismét FORGAT(x).
z x y y
z x
x
y z
(1) Ha x-nek nincs nagyapja, akkor FORGAT(x), különben
(2) ha x és y is baloldali (jobboldali) gyerek,x y
z y
x z
x y
z akkor FORGAT(y), majd FORGAT(x), különben
(3) ha x és y különböz ˝o oldali gyerekek,
akkor FORGAT(x), majd ismét FORGAT(x).
z x y y
z x
x
y z
ALGORITMUSELMÉLET 4. EL ˝OADÁS 15
M ˝ uveletek az S-fákban
A keres ˝ofákra jellemz ˝o KERES(x, f), BESZÚR(x, f) és TÖRÖL(x, f) m ˝uveletek a szokásosak.
feltéve, hogy x < y teljesül minden x ∈ f és y ∈ f0 kulcsra.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 15
M ˝ uveletek az S-fákban
A keres ˝ofákra jellemz ˝o KERES(x, f), BESZÚR(x, f) és TÖRÖL(x, f) m ˝uveletek a szokásosak.
A RAGASZT(f, f0) m ˝uvelet az f és f0 S-fákból egyetlen S-fát szervez, feltéve, hogy x < y teljesül minden x ∈ f és y ∈ f0 kulcsra.
A VÁG(x, f) m ˝uvelet szétvágja f-et az f0 és f00 S-fákra úgy, hogy y ≤ x ≤ z teljesül minden y ∈ f0 és z ∈ f00 csúcsra.
feltéve, hogy x < y teljesül minden x ∈ f és y ∈ f0 kulcsra.
A VÁG(x, f) m ˝uvelet szétvágja f-et az f0 és f00 S-fákra úgy, hogy y ≤ x ≤ z teljesül minden y ∈ f0 és z ∈ f00 csúcsra.
Tétel. Az ismertetett m ˝uveletek mindegyike megvalósítható konstans számú KIFORDÍT és konstans számú elemi operáció (összehasonlítás, mutató
beállítás, stb.) segítségével.
Bizonyítás: Csak két m ˝uvelet, a RAGASZT és a TÖRÖL esetét nézzük meg közelebbr ˝ol, többi trivi.
ALGORITMUSELMÉLET 4. EL ˝OADÁS 15
M ˝ uveletek az S-fákban
A keres ˝ofákra jellemz ˝o KERES(x, f), BESZÚR(x, f) és TÖRÖL(x, f) m ˝uveletek a szokásosak.
A RAGASZT(f, f0) m ˝uvelet az f és f0 S-fákból egyetlen S-fát szervez, feltéve, hogy x < y teljesül minden x ∈ f és y ∈ f0 kulcsra.
A VÁG(x, f) m ˝uvelet szétvágja f-et az f0 és f00 S-fákra úgy, hogy y ≤ x ≤ z teljesül minden y ∈ f0 és z ∈ f00 csúcsra.
Tétel. Az ismertetett m ˝uveletek mindegyike megvalósítható konstans számú KIFORDÍT és konstans számú elemi operáció (összehasonlítás, mutató
beállítás, stb.) segítségével.
Bizonyítás: Csak két m ˝uvelet, a RAGASZT és a TÖRÖL esetét nézzük meg közelebbr ˝ol, többi trivi.
RAGASZT(f, f0) =⇒ el ˝oször KIFORDÍT(+∞, f) =: f∗
feltéve, hogy x < y teljesül minden x ∈ f és y ∈ f0 kulcsra.
A VÁG(x, f) m ˝uvelet szétvágja f-et az f0 és f00 S-fákra úgy, hogy y ≤ x ≤ z teljesül minden y ∈ f0 és z ∈ f00 csúcsra.
Tétel. Az ismertetett m ˝uveletek mindegyike megvalósítható konstans számú KIFORDÍT és konstans számú elemi operáció (összehasonlítás, mutató
beállítás, stb.) segítségével.
Bizonyítás: Csak két m ˝uvelet, a RAGASZT és a TÖRÖL esetét nézzük meg közelebbr ˝ol, többi trivi.
RAGASZT(f, f0) =⇒ el ˝oször KIFORDÍT(+∞, f) =: f∗ =⇒ f∗ gyökere x az új fa legnagyobb kulcsa
ALGORITMUSELMÉLET 4. EL ˝OADÁS 15
M ˝ uveletek az S-fákban
A keres ˝ofákra jellemz ˝o KERES(x, f), BESZÚR(x, f) és TÖRÖL(x, f) m ˝uveletek a szokásosak.
A RAGASZT(f, f0) m ˝uvelet az f és f0 S-fákból egyetlen S-fát szervez, feltéve, hogy x < y teljesül minden x ∈ f és y ∈ f0 kulcsra.
A VÁG(x, f) m ˝uvelet szétvágja f-et az f0 és f00 S-fákra úgy, hogy y ≤ x ≤ z teljesül minden y ∈ f0 és z ∈ f00 csúcsra.
Tétel. Az ismertetett m ˝uveletek mindegyike megvalósítható konstans számú KIFORDÍT és konstans számú elemi operáció (összehasonlítás, mutató
beállítás, stb.) segítségével.
Bizonyítás: Csak két m ˝uvelet, a RAGASZT és a TÖRÖL esetét nézzük meg közelebbr ˝ol, többi trivi.
RAGASZT(f, f0) =⇒ el ˝oször KIFORDÍT(+∞, f) =: f∗ =⇒ f∗ gyökere x az új fa legnagyobb kulcsa
=⇒ csatoljuk f0-t x jobb fiának
feltéve, hogy x < y teljesül minden x ∈ f és y ∈ f0 kulcsra.
A VÁG(x, f) m ˝uvelet szétvágja f-et az f0 és f00 S-fákra úgy, hogy y ≤ x ≤ z teljesül minden y ∈ f0 és z ∈ f00 csúcsra.
Tétel. Az ismertetett m ˝uveletek mindegyike megvalósítható konstans számú KIFORDÍT és konstans számú elemi operáció (összehasonlítás, mutató
beállítás, stb.) segítségével.
Bizonyítás: Csak két m ˝uvelet, a RAGASZT és a TÖRÖL esetét nézzük meg közelebbr ˝ol, többi trivi.
RAGASZT(f, f0) =⇒ el ˝oször KIFORDÍT(+∞, f) =: f∗ =⇒ f∗ gyökere x az új fa legnagyobb kulcsa
=⇒ csatoljuk f0-t x jobb fiának
ALGORITMUSELMÉLET 4. EL ˝OADÁS 16
TÖRÖL(x, f) =⇒ KIFORDÍT(x, f)
ALGORITMUSELMÉLET 4. EL ˝OADÁS 16
TÖRÖL(x, f) =⇒ KIFORDÍT(x, f)ha a kapott fa gyökere nem x, akkor x 6∈ f =⇒
√
Ha x az új fa gyökere, töröljük és a kapott két f1 és f2 részfára RAGASZT(f1, f2)
melyben n beszúrás van, O(m log n).
ALGORITMUSELMÉLET 4. EL ˝OADÁS 16
TÖRÖL(x, f) =⇒ KIFORDÍT(x, f)ha a kapott fa gyökere nem x, akkor x 6∈ f =⇒
√
Ha x az új fa gyökere, töröljük és a kapott két f1 és f2 részfára RAGASZT(f1, f2)
Tétel. Egy üres S-fából induló olyan m m ˝uveletb ˝ol álló sorozat költsége, melyben n beszúrás van, O(m log n).
Java animáció: S-fa