190 likes | 430 Views
AVL DREVESA. 1. seminarska naloga pri predmetu Računalništvo 2. Avtorici : Tjaša Rebec in Maja Komljanovič Mentor : prof. Matija Lokar Ljubljana, maj 2010. UVOD. AVL drevesa so nastala leta 1962
E N D
AVLDREVESA 1. seminarska naloga pri predmetu Računalništvo 2 Avtorici : Tjaša Rebec in Maja Komljanovič Mentor : prof. Matija Lokar Ljubljana, maj 2010
UVOD • AVL drevesa so nastala leta 1962 • Ime AVL so dobila po začetnicah priimkov avtorjev Adelson-Velskii in Landis, ki sta dokazala, da je red hitrosti naraščanja višine uravnoteženega drevesa glede na število vozlišč v drevesu O(log(n)) (n je število elementov v drevesu )
AVL DREVO AVL drevo je uravnoteženo drevo, za katerega velja: • Elementi v levem poddrevesu so manjši od korena, v desnem poddrevesu pa večji. • višini desnega in levega poddrevesa se ne razlikujeta za več kot 1 • prazno drevo je prav tako AVL drevo. • levo in desno poddrevo sta tudi AVL drevesi. Osnovni operaciji sta : • brisanje • vstavljanje
Pri operacijah vstavljanja in brisanja je potrebno drevo z rotacijami ustrezno spremeniti, kajti vsak izbrisan ali dodan list lahko poruši ravnotežje. • Rotacije, ki jih uporabljamo, so: • Leva rotacija • Desna rotacija • Levo-desna rotacija • Desno-leva rotacija
5 1 • Primer AVL drevesa: V drevesu je razlika med višinama desnega in levega poddrevesa natanko 1, kar pomeni, da je AVL drevo. Pri AVL drevesu poleg podatka hranimo še njegov ravnotežnostni faktor, ki ga izračunamo tako, da od višine levega poddrevesa odštejemo višino desnega poddrevesa. 3 0 8 0 1 0 4 0
5 -2 • Primer drevesa, ki ni AVL: Zgornji primer ni AVL drevo, ker je višina desnega poddrevesa za 2 večja od levega. Da bi drevo postalo AVL, bi bilo potrebno drevo uravnotežiti, torej narediti rotacijo. 2 0 6 -2 8 -1 12 0
VSTAVLJANJE ELEMENTOV • Vstavljanje v prazno drevo ali v drevo s samo enim elementom je enostavno (enako kot pri iskalnih drevesih). • Sicer pa najprej poiščemo mesto za vstavljanje in element vstavimo, ko pridemo do lista. Novi list dobi faktor ravnotežja 0, ostalim vozliščem na poti do njega pa se faktor ustrezno spremeni. • Če se s tem ni porušilo ravnotežje (v vseh vozliščih še vedno velja -1 < faktor < 1), je postopek zaključen. • Če se je ravnotežje porušilo, pa so potrebne rotacije, s katerimi spet uravnotežimo drevo.
OPIS ROTACIJ • Leva rotacija: pri vstavljanju novega elementa smo se pomaknili dvakrat v levo, zato se je ravnotežje pokvarilo - ta del drevesa rotiramo v desno. Po opravljeni rotaciji je drevo uravnoteženo. 5 2 3 0 3 1 1 0 5 0 1 0
Desna rotacija je simetrična levi – pri vstavljanju novega elementa smo se od vozlišča 7 pomaknili dvakrat v desno in s tem pokvarili ravnotežje poddrevesa. To poddrevo rotiramo v levo: 6 -1 6 -2 2 0 8 0 2 0 7 -2 8 -1 7 0 12 0 12 0
Levo-desna (L - D) rotacija: pri vstavljanju novega elementa smo se od korena pomaknili najprej v levo in nato v desno. Drevo bomo uravnotežili v dveh korakih – najprej bomo zarotirali levo poddrevo v levo, nato pa še celotno drevo v desno. 5 2 5 2 3 0 2 -1 2 0 5 0 3 1 3 0 2 0
Desno-leva (D - L) rotacija je zrcalna slika L – D rotacije: pri vstavljanju novega elementa smo se pomaknili najprej v desno in nato še v levo. Drevo spet uravnotežimo z dvema zaporednima rotacijama – najprej rotiramo desno poddrevo v desno in nato še celotno drevo v levo. 3 -2 3 -2 4 0 6 1 4 -1 3 0 6 0 6 0 4 0
BRISANJE ELEMENTOV • Če je brisani element list, ga enostavno odstranimo ter nato popravimo ravnotežnostne faktorje in izvedemo morebitne rotacije. • V splošnem pa izbrisano vozlišče nadomestimo z najbolj levim vozliščem v desnem poddrevesu. Če pa ta ne obstaja, pa z najbolj desnim vozliščem v levem poddrevesu. Nato spet popravimo ravnotežnostne faktorje in drevo po potrebi zarotiramo.
Primer brisanja elementa: Iz spodnjega AVL drevesa izbrišimo element 7. Poiščemo najbolj levo vozlišče v desnem poddrevesu vozlišča 7. To je vozlišče 9, ki ga postavimo namesto izbrisane sedmice. Popravimo ravnotežnostne faktorje in ugotovimo, da je drevo uravnoteženo. 4 -1 4 0 3 1 7 -1 3 1 9 0 1 0 6 0 10 1 1 0 6 0 10 0 9 0
PRIMER GRADNJE DREVESA Iz naslednjih podatkov bomo sestavili AVL drevo: 51, 23, 18, 22, 12, 7, 42, 46, 28, 68, 24, 10, 6, 8, 30, 11, 48, 13 in 44. • Vstavimo prve tri elemente – po tretjem je potrebna leva rotacija. Nato brez posebnosti vstavimo še 22 in 12. 51 2 23 1 23 1 18 0 51 0 12 0 22 0 18 0
Pri vstavljanju števila 7 pa se nam ravnotežje podre. Potrebna je leva rotacija okrog vozlišča 23. • Po rotaciji brez posebnosti vstavimo še 42. 23 2 18 -1 18 1 51 0 12 1 23 -1 12 1 22 0 7 0 22 0 51 1 42 0 7 0
Med vstavljanjem števila 46 se ravnotežje podre – naredimo L – D rotacijo na vozlišču 51. 18 -2 18 -1 12 1 23 -2 12 1 23 -1 7 0 22 0 51 2 7 0 22 0 46 0 42 -1 42 0 51 0 46 0
Tudi pri vstavljanju števila 28 je potrebno drevo uravnotežiti. Okoli vozlišča 23 naredimo D – L rotacijo. 18 -1 18 -2 12 1 42 0 12 1 23 -2 7 0 230 46 -1 7 0 220 46 1 51 0 42 1 51 0 22 0 28 0 28 0
Podobno vstavljamo še preostale elemente in pazimo, da pri vsakem vstavljanju ne pozabimo popraviti ravnotežnostnih faktorjev v vozliščih in posledično opraviti potrebnih rotacij. Končni rezultat je naslednje AVL drevo: 23 0 10 -1 42 -1 7 0 18 1 280 51 1 6 0 8 0 12 0 22 0 24 0 30 0 46 0 68 0 11 0 13 0 44 0 48 0
VIRI IN LITERATURA • Jernej Kozak: Podatkovne strukture in algoritmi • http://penelope.fmf.uni-lj.si/r2wiki/index.php/AVL_drevesa • http://rc.fmf.uni-lj.si/matija/OpravljeneDiplome/Petra_Tome_Diploma.pdf