Def A P F pont (mgsság-)egyensúly: AVL f Egy(P) = h(jo(p)) h(bl(p)) Def Az F inf AVL-f, h ( P F)( Egy(P) ) tétel H F AVL-f, kkor h(f).44 lg(n + ), hol n z F f pontjink számát jelöli. Biz Legyen N m z m mgsságú, legkevese pontot trtlmzó AVL-f pontjink szám. Ekkor N m F, h F AVL-f és h(f) = m. N =, N =, N 2 = 2 és N m = + N m 2 + N m, h m >. Legyen B i = N i +. Ekkor B =,B = 2 és B m = B m 2 + B m h (m > ). lemm Φ m B m, hol (Φ = + 5)/2. = Φ B, Φ B. Teljes indukió lpján, h 2,...,m -re áll z egyenlőtlenség B m = B m 2 + B m Φ m 2 + Φ m = Φ m 2 ( + Φ). Viszont ( + Φ) = Φ 2, így lemmát igzoltuk. Tehát Φ m B m = N m + n +, zz m logφ log(n + ). Következésképpen h(f) = m logφ log(n + ) =.44 log(n + ). Műveletek Mind eszúrás mind pedig törlés esetén z lgoritmus elsőként ináris keresőfáknál tnultknk megfelelően eszúrj illetve törli z elemet, mjd eszúráshoz illetve törléshez trtozó ővítőúton illetve törlőúton felfele hldv lokális forgtásokkl helyreállítj tuljdonságot. Def U = [P,...,P m ] X-ővítőút, h h X < Adt(P i ) kkor P i+ = Bl(P i ) és h X > Adt(P i ) kkor P i+ = Jo(P i ) i < m esetén h X < Adt(P m ) kkor Bl(P m ) = Nil és h X > Adt(P m ) kkor Jo(P m ) = Nil Def U = [P,...,P m ] X-törlőút, h t m melyre Adt(P t ) = X és h X < Adt(P i ) kkor P i+ = Bl(P i ) és h X > Adt(P i ) kkor P i+ = Jo(P i ) i < t esetén t = m és Bl(P t ) = Nil vgy Jo(P t ) = Nil vgy t < m és Bl(P t ) Nil Jo(P t ) Nil és P t+ = Jo(P t ), Pi+ = Bl(P i ) h (t < i < m) BlrForgt(F,x) y:=jo(x) jo(x):=l(y) if l(y)!=nil(t) then p(l(y)):=x p(y):=p(x) If p(x)=nil(f) Then F:=y else if x=l(p(x)) Jor és lrforgtás
then l(p(x)):=y else jo(p(x):=y l(y):=x p(x):=y A JorForgt teljesen hsonló, x helyére lfi kerül. X 2 Y Y X - Egyszeres lr forgtás. ár. Kétszeres forgtás A kétszeres lr forgtás esetén feltesszük, hogy l( jo(x) Nil, ez feltétel teljesül, mikor helyreállítás során ezt forgtást kell hsználni. KetszeresBlrForgt(F,x) y:=jo(x) z:=l(jo(x)) jo(x):=l(z) if l(z)!=nil then p(l(z)):=x l(y):=jo(z) if jo(z)!=nil then p(jo(z)):=y p(z):=p(x) If p(x)=nil Then F:=z 2
Y X -2 - X Y - Egyszeres jor forgtás 2. ár. else if x=l(p(x)) then l(p(x)):=z else jo(p(x):=z l(z):=x p(x):=z jo(z):=y p(y):=z A JorForgt teljesen hsonló, x helyére lfiánk jofi kerül. A helyreállítás időigénye Miután ővítő és törlőút minden eleménél legfelje egy forgtást hjtunk végre z időigény O(log(n)). Igzolhtó, hogy eszúrás esetén konstns. Demonstráiós progrmok AVL fák esetén. http://people.ksp.sk/~kuko/k/index.html http://www.si.uottw./~stn/si254/pplets/vl/bt.html Áltlános keresőfák Az áltlános keresőf olyn sztrkt dtszerkezet, mely f és minden elláján nem sk egy kuls (dt) hnem kulsok egy rendezett sorozt vn. Tehát minden p F esetén Adt(p) = [,..., k ]. Ekkor zt mondjuk, hogy p rngj k, Rng(p) = k. Def. Az F f (áltlános) keresőf, h p F esetén: 3
A 2 B - C - d C A - d B Kétszeres lr forgtás 3. ár. p-nek Rng(p)+ = Fok(p) számú fi vn. Adt(p) = [,..., k ] egy rendezett sorozt. mx(f f iu(p,i)) i min(f f iu(p,i + )), minden i =,...,Rng(p), hol F f iu(p,i) z F f f iu(p,i) gyökerű részfáj. Def. Az F f t-rendű (t 2) B-f, h teljesül rá z lái 4 feltétel: Áltlános keresőf. A gyökér kivételével minden p F pontr t Rng(p) 2t, gyökér rngj legfelje 2t. Minden p F nem levél pontr Fiu(p,i) Nil, i =,...,Rng(p) +. Minden p F levélpontr d(p) = h(f), zz minden levél pont mélysége zonos. Egy p pontot telítettnek nevezünk, h Rng(p) = 2t, illetve minimálisnk, h Rng(p) = t. Továá feltesszük, hogy minden ponthoz trtozik egy Level oolen változó, mi kkor igz, h pont levél. B-fák felhsználás: B fákt olyn dtszerkezetek esetén hsználják, melyek nem férnek el gyorsmemórián. Az ktuális pont vn gyorsmemórián, és mikor másik lpr érünk zt háttértáról olvssuk e. Következésképpen műveletek htékonyság elsősorn pontokhoz történő hozzáférések számától függ. B-fák mgsság Tétel: Minden n dtot trtlmzó t-rendű F B-fár h(f) log t n+ 2 +. 4
C B -2 d A - A B - d C Kétszeres jor forgtás 4. ár. Biz. Vizsgáljuk meg, hogy egy h mgsságú t rendű B-fán mennyi z dtok minimálisn lehetséges szám. A gyökér leglá egy dtot trtlmz, és vn két fi. A első szinten mindkét fiú leglá t dtot trtlmz, és mindkettőnek vn leglá t fi. Azz második szinten leglá 2t pont vn. A második szinten 2t pont mindegyike trtlmz leglá t dtot, így szinten z dtok szám 2t(t ) tová minden pontnk vn leglá t fi, így következő szinten pontok szám 2t 2. Teljes indukióvl igzolhtó, hogy z i-edik szinten pontok szám leglá 2t i, így z dtok szám leglá 2t i (t ). Következésképpen egy h mgs fán z dtok szám h + i= 2t i (t ) = + 2(t ) th t Tehát n 2t h, így h log t n+ 2 +. Keresés B fán = 2t h. A keresés áltlánosítás ináris keresőfák esetén hsznált keres lgoritmusnk. Bfkeres(F,x) i:= while i<=rng(f) nd k>kuls(f,i) i:=i+ if i<=rng(f) nd k=kuls(f,i) Then return(f,i) 5
P=,..., k Fiu(P,) Fiu(P,) Fiu(P,k- ) Fiu(P,k) Áltlános keres f 5. ár. if level(f) Then return Nil else return BFkeres(Ffiu(F,i),k) Pontok szétvágás A Beszúrás során pontot levéle szúrjuk e, hol sikertelen keresése véget érne. Ekkor h ez levél telített, kkor eszúrás sértené pontok rngjár vontkozó korlátot. Ennek megelőzésére eszúrás során megszüntetjük telített pontokt. Erre hsználhtjuk telített pontok szétvágását megvlósító lái eljárást. Az lgoritmus z y pontot, melyre Rng(y) = 2t és mely z x pont i-edik fi vágj ketté közepén. A középső dt felmegy z x-e. Bfvg(x,i,y) Letesit(z: Bfpont) Level(z):=Level(y) Rng(z):=t- for j= to t- kuls(z,j):=kuls(y,j+t) if notlevel(y) Then for j= to t Fiu(z,j):=Fiu(y,j+t) Rng(y):=t- for j:=rng(x)+ down to i+ Fiu(x,j+):=Fiu(x,j) 6
F(x,i+):=z for j:=rng(x)+ down to i kuls(x,j+)=kuls(x,j) kuls(x,i):=kuls(y,t) Rng(x):=Rng(x)+ X=...xi, xi+... Y= y,...yt-, yt, yt+... y2t- X=...xi,,yt,,xi+... y,...yt- yt+... y2t- B f szétvágás 6. ár. Beszúrás B fá Bfeszur(F,k) If Rng(F)=2t- Then r:=f Letesit(s: Bfpont) Level(s):=flse Rng(s):= Fiu(s,):=F F:=s Bfvg(F,,r) NemTelitettBeszur(F,k) Else NemTelitettBeszur(F,k) NemTelitettBeszur(F,k) i:=rng(f) if level(f) 7
then while i>= nd k<kuls(f,i) kuls(f,i+):=kuls(f,i) i:=i- kuls(f,i+):=k rng(f):=rng(f)+ else while i>= nd k<kuls(f,i) i:=i- if Rng(Fiu(F,i))=2t- then Bfvg(F,i,Fiu(F,i)) if k>kuls(f,i) then i:=i+ NemTelitettBeszur(Fiu(F,i),k) Törlés B fáól Elsőként megkeressük törlendő súsot, h törlendő kuls nem levélen vn, kkor megkeressük rákövetkező elemet (nnk részfánk mximális (legjorá eső) eleme, melynek gyökere keresett kuls jooldli fi). Ez z elem már levélen helyezkedik el, zt töröljük fáól z dtokt törlés előtt kiseréljük. Prolém kkor áll fennt h levél, melyen tényleges törlést végrehjtjuk minimális. Ezt lehetőséget úgy zárjuk ki, hogy ténylegesen kitörlendő elem keresése során, mindig megszüntetjük minimális pontokt fán. Minimális pontok megszüntetése H pontnk vgy lszomszédj vgy joszomszédj nem minimális, kkor megfelelő nem minimális szomszédól átdunk egy elemet. Ezt úgy tehetjük meg, hogy z átdó pont legszélső eleme felmegy z pá, és z p megfelelő eleme, lemegy minimális pont, melyen meg krjuk szüntetni minimlitást. H pontnk egy minimális szomszédj vn, vgy mindkét szomszédj minimális, kkor pontot és egy minimális szomszédját összevonjuk. A két pontól, továá z pán két pontot elválsztó kulsól egy új pont lesz, minek rngj 2t. Az összevonás Bfvg művelet inverze. Mind eszúrás mind pedig törlés futási ideje legrossz eseten B f mgsságávl rányos. Tehát futási idő O(log t (n)). A fenti lgoritmusok mind eszúrás mind pedig törlés esetén z ugynevezett pesszimist strtégiát követték, mi zt jelenti, hogy eszúrás helyének, illetve ténylegesen törlendő elemnek keresése során gondoskodnk ról, hogy ne legyen telített illetve minimális pont. Létezik optimist megvlósítás is ugynezeknek z ötleteknek, mely során elsőként megkeressük eszúrás helyét illetve törlendő elemet és szükség esetén állítjuk helyre rngokr vontkozó korlátokt, felfele menve eszúró illetve törlőúton. http://people.ksp.sk/~kuko/k/index.html http://sldy.net/jv/t/view.php AVL f definíió egyszeres, kétszeres forgtás z AVL f tuljdonság helyreállításink esetei B f definíiój Demonstráiós progrmok Kiskérdések 8
X= x, x2,... xk Y=y,..., yj Z=z,..., zt- X= yj, x2,... xk Y=y,..., yj- Z=x,z,..., zt- 7. ár. B f szétvágás Beszúrás B fá Törlés B fáól 9