6. előadás
AVL fák Az első kiegensúlozott fa algoritmus Kitalálói: Adelson-Velskii és Landis (196) Tulajdonságok Bináris rendezőfa A bal és jobb részfák magassága legfeljebb 1-gel különbözik A részfák is AVL fák AVL fa AVL fa
AVL fák Jelölje m(f) az f bináris fa magasságát (szintjeinek számát), a az f fa eg csúcsa: ekkor m() jelöli az -gökerű részfa magasságát. Definíció (AVL-tulajdonság): Eg bináris keresőfa AVL-fa, a minden csúcsára teljesül, og m(bal[]) m(jobb[]) 1
AVL fák Mekkora a k - szintű AVL-fa minimális csúcsszáma? S 0 = 1 S 1 = S = 4 S 3 = 7
AVL fák Mekkora a k - szintű AVL-fa minimális csúcsszáma? S 4 =1
AVL fák Összefüggés az AVL-fa pontszáma és magassága között: n adattal felépítető fa minimális magassága? majdnem teljes bináris fa n adattal felépítető fa maimális magassága? uganez a kérdés: az adott szintszámú AVL-fák közül menni a minimális pontszám? A szintszámú minimális csúcsszámú AVL-fa gökerének egik részfája 1, a másik szintű; az eredeti fa minimalitása miatt pedig mindkét részfa minimális csúcsszámú.
-1 - rekurzió: S = 1 + S -1 + S -
AVL fák - magasság Tétel: Eg magasságú AVL fának legalább F +3-1 csúcsa van Bizonítás: Legen S a legkisebb magasságú AVL fa mérete (ezt jelöljük majd n-nel) Nilván, S 0 = 1 és S 1 = valamint S = S -1 + S - + 1 Indukcióval.. S = F +3-1 ( 3-mal eltolt Fibonacci ) (F + -1+F +1-1 +1=F +3-1)
AVL fák - magasság A Fibonacci számokra igaz a Binet-formula: F n 1 1 n 1 n F 3 3 3 3 1 1 1 1 1 1 1 1
n S 1,44log log 1 log 1 log / 1 1 1 1 1 8 3 3 1 1 n S nem meet az optimális fölé 44%- kal többel
Újrakiegensúlozás beszúrásnál A beszúrás elrontja az AVL tulajdonságot 1 3 4 4 eset: 1 és 4 tükörképek és 3 tükörképek
Újrakiegensúlozás beszúrásnál Eg új attribútumot vezetünk be: kiegensúlozási ténező -1 : bal részfa magasabb 1-gel 0 : egforma magasak a részfák +1: jobb részfa magasabb 1-gel
A (++,+) szabál: + 0 ++ + +1 < < < < beszúrás Az új levél a részfába került. A beszúrás előtt a fa magassága + volt.
A (++,+) szabál: ++ + +1 Az új levél a részfába került. A beszúrás előtt a fa magassága + volt. Forgatás: +1 Ennek a tükörképe a (--,-) szabál! (1. eset) < < < < A forgatás után ismét + a magasság. Ezért feljebb, a befoglaló fában (a van), változatlanul érvénes az AVL tulajdonság, nem kell feljebb menni ellenőrizni.
Példa 1 ++ + 10 3 18 0-17 1-30 ezt szúrtuk be
Példa 0 1 10 18 30 3 17 1
A (++,-) szabál: + 0 z 0-1 -1 Az új levél a z alatti vag részfába került. A beszúrás előtt a z csúcs alatti fák egformák: z ++ - < < < z < < < -1-1 A beszúrás után az egik részfa magassága lett, a másik maradt -1.
A (++,-) szabál: ++ Dupla forgatás kell: először jobbra: ++ - z + z -1 v. 0 v.+ -1-1 v. -1 < < < z < < <
A (++,-) szabál: Dupla forgatás kell: azután balra: z z
A (++,-) szabál: Végeredmén z A beszúrás előtt az gökerű fa magassága + volt. A forgatás után ismét + a magasság. Ezért feljebb, a befoglaló fában (a van), változatlanul érvénes az AVL tulajdonság, nem kell feljebb menni ellenőrizni. Továbbra is igaz: < < < z < < < Ennek a tükörképe a (--,+) szabál!
Újrakiegensúlozás beszúrásnál Összefoglalva: A beszúrás után az új levéltől felfelé aladva a gökér felé újra számoljuk a csúcsok címkéit ezen az útvonalon. Ha eg csúcs címkéje ++ vag -lesz, akkor az gökerű (rész)fa (esetleg dupla) forgatásával elreállítató az AVL tulajdonság. Műveletigén: O(1)
Újrakiegensúlozás beszúrásnál Tétel. Legen S eg n csúcsból álló AVL-fa. BESZÚR(s; S) után legfeljebb eg (esetleg dupla) forgatással elreállítató az AVL-tulajdonság. A beszúrás költsége ezzel egütt is O(log n). Bizonítás: az előzőekből következik
AVL fák újrakiegensúlozás törlésnél A (++,+) és (++,0) szabál +1 + + v. 0 v. +1 +1 A törlés az részfában történt. Ennek a magassága +1 volt és lett. Az gökerű fa magassága +3 volt. ++ + v. 0 v. +1 +1 < < < <
A (++,+) (++,0) szabál ++ + v. +1 +1 A törlés az részfában történt. Ennek a magassága +1 volt és lett. Az gökerű fa magassága +3 volt. Forgatás: v. +1 0 v. - +1 < < < < A forgatás után + a magasság. Ezért feljebb, a befoglaló fában (a van), nem biztos, og változatlanul érvénes az AVL tulajdonság, feljebb kell menni ellenőrizni, amíg a gökérig nem jutunk.
A (++,+) szabál Ha az eredeti fában például: + z + + +1 +1 +4 < < < < < z <
A (++,+) szabál Akkor az eredmén fa: z ++ + 0 +1 +4 < < < < < z < feljebb kell menni ellenőrizni, és szükség szerint elreállítani, amíg a gökérig nem jutunk.
A (++,-) szabál +1-1 v. z + v. -1 < < < z < < < - A törlés az részfában történik. Ennek a magassága +1 volt és lett. Az gökerű fa magassága +3. -1 v. z ++ 0 v. -1 - dupla forgatás
A (++,-) szabál: ++ Dupla forgatás kell: először jobbra: ++ - z z -1 v. -1 v. v. -1 v. -1 < < < z < < <
A (++,-) szabál: Dupla forgatás kell: azután balra: z z -1 v. v. -1
A (++,-) szabál: Végeredmén z A forgatás után + a magasság. Ezért feljebb, a befoglaló fában (a van), nem biztos, og változatlanul érvénes az AVL tulajdonság, feljebb kell menni ellenőrizni, amíg a gökérig nem jutunk. Továbbra is igaz: < < < z < < <
Újrakiegensúlozás törlésnél Összefoglalva: Mivel az gökerű fa magassága csökkent a forgatással, ezért feljebb is, a van befoglaló fa, elromolatott az AVL tulajdonság. A törlés után a törölt elem szülőjétől kezdve felfelé aladva a gökér felé újra számoljuk a csúcsok címkéit ezen az útvonalon. Ha eg csúcs címkéje ++ vag - lesz, akkor az gökerű (rész)fa (esetleg dupla) forgatásával elreállítjuk annak AVL tulajdonságát. Ha nem a gökér, akkor feljebb kell lépni és foltatni kell az ellenőrzést. Szélsőséges esetben az adott útvonal minden pontjában forgatni kell!
Újrakiegensúlozás törlésnél Tétel: Az n pontú AVL-fából való törlés után legfeljebb 1,44 log n (sima vag dupla) forgatás elreállítja az AVL-tulajdonságot. Bizonítás: az előzőekből következik.
Összefoglalás AVL fák Az első dinamikusan kiegensúlozott fák A magasság az optimális 44%-án belül Újrakiegensúlozás forgatásokkal O(log n) Nézzük meg az animációt! ttp://www.cs.ju.edu/~goodric/dsa/trees/avltree.tml