logo

AVL fa

Az AVL Tree-t a GM Adelson - Velsky és az EM Landis találta fel 1962-ben. A fát feltalálói tiszteletére AVL-nek nevezték el.

Az AVL Tree magassággal kiegyensúlyozott bináris keresőfaként definiálható, amelyben minden csomópont hozzá van rendelve egy egyensúlyi tényezőhöz, amelyet úgy számítanak ki, hogy a jobb oldali részfa magasságát kivonják a bal oldali részfáéból.

egyesítése rendezés java

A fa kiegyensúlyozottnak tekinthető, ha az egyes csomópontok egyensúlytényezője -1 és 1 között van, ellenkező esetben a fa kiegyensúlyozatlan lesz, és ki kell egyensúlyozni.

Egyensúlytényező (k) = magasság (bal (k)) - magasság (jobb (k))

Ha bármely csomópont egyensúlyi tényezője 1, az azt jelenti, hogy a bal oldali részfa egy szinttel magasabb, mint a jobb oldali részfa.

Ha bármely csomópont egyensúlyi tényezője 0, az azt jelenti, hogy a bal oldali részfa és a jobb oldali részfa azonos magasságú.

Ha bármely csomópont egyensúlytényezője -1, az azt jelenti, hogy a bal oldali részfa egy szinttel alacsonyabb, mint a jobb oldali részfa.

A következő ábrán egy AVL fa látható. Láthatjuk, hogy az egyes csomópontokhoz tartozó egyensúlytényező -1 és +1 között van. ezért ez egy példa az AVL fára.

AVL fa

Bonyolultság

Algoritmus Átlagos eset Legrosszabb esetben
Hely tovább) tovább)
Keresés o(log n) o(log n)
Beszúrás o(log n) o(log n)
Töröl o(log n) o(log n)

Műveletek az AVL fán

Tekintettel arra, hogy az AVL fa egyben bináris keresőfa is, minden műveletet ugyanúgy hajtanak végre, mint egy bináris keresőfában. A keresés és a bejárás nem vezet az AVL fa tulajdonságainak megsértéséhez. Azonban a beillesztés és a törlés azok a műveletek, amelyek sérthetik ezt a tulajdonságot, ezért ezeket újra meg kell vizsgálni.

SN Művelet Leírás
1 Beillesztés Az AVL fába történő beillesztés ugyanúgy történik, mint a bináris keresési fában. Ez azonban az AVL-fa tulajdonság megsértéséhez vezethet, ezért előfordulhat, hogy a fát ki kell egyensúlyozni. A fa forgatással egyensúlyba hozható.
2 Törlés A törlés ugyanúgy végrehajtható, mint a bináris keresési fában. A törlés a fa egyensúlyát is megzavarhatja, ezért különféle forgatásokat alkalmaznak a fa egyensúlyának helyreállítására.

Miért AVL Tree?

Az AVL-fa szabályozza a bináris keresési fa magasságát úgy, hogy nem engedi, hogy elferdüljön. A h magasságú bináris keresési fa összes műveletéhez szükséges idő O(h) . Ez azonban kiterjeszthető arra Tovább) ha a BST elferdül (azaz a legrosszabb eset). Ha ezt a magasságot log n-re korlátozza, az AVL fa felső korlátot ír elő minden egyes be műveletre O(log n) ahol n a csomópontok száma.

AVL forgások

Az AVL fában csak abban az esetben végezzük el a forgatást, ha a Balance Factor nem -1, 0 és 1 . Alapvetően négyféle forgatás létezik, amelyek a következők:

  1. L L forgatás: A beszúrt csomópont az A bal oldali részfájának bal részfájában található
  2. R R forgatás: A beszúrt csomópont az A jobb oldali részfájának jobb oldali részfájában található
  3. L R elforgatás: A beszúrt csomópont az A bal oldali részfájának jobb oldali részfájában található
  4. R L forgatás: A beszúrt csomópont az A jobb oldali részfájának bal oldali részfájában található

Ahol az A csomópont az a csomópont, amelynek egyensúlyi tényezője nem -1, 0, 1.

Az első két forgás LL és RR egyszeres, a következő két LR és RL forgatás kettős forgatás. Ahhoz, hogy egy fa kiegyensúlyozatlan legyen, a minimális magasságnak legalább 2-nek kell lennie. Értsük meg az egyes forgatásokat

1. RR forgatás

Amikor a BST kiegyensúlyozatlanná válik, amiatt, hogy az A jobb oldali részfájába egy csomópont kerül be, akkor RR forgatást hajtunk végre, az RR forgatás az óramutató járásával ellentétes forgatás, amelyet a -2 egyensúlyi tényezőjű csomópont alatti élre alkalmazunk.

AVL forgások

A fenti példában az A csomópont egyensúlyi tényezője -2, mert a C csomópont az A jobb oldali részfa jobb oldali részfájába van beillesztve. Az RR forgatást az A alatti élen hajtjuk végre.

2. LL forgás

Amikor a BST kiegyensúlyozatlanná válik, amiatt, hogy a C bal oldali részfájába egy csomópont kerül be, akkor LL forgatást hajtunk végre, az LL forgatás az óramutató járásával megegyező forgatás, amelyet egy 2-es egyensúlytényezővel rendelkező csomópont alatti élre alkalmazunk.

AVL forgások

A fenti példában a C csomópont 2-es egyensúlyi tényezővel rendelkezik, mivel egy A csomópont be van illesztve a C bal részfa bal oldali részfájába. Az LL forgatást az A alatti élen végezzük.

3. LR forgatás

A kettős forgatás kissé keményebb, mint az egyszeri forgatás, amit fentebb már kifejtettünk. LR forgatás = RR forgatás + LL elforgatás, azaz először az RR forgatást részfán, majd az LL forgatást teljes fán hajtjuk végre, teljes fa alatt a beillesztett csomópont útvonalának első csomópontját értjük, amelynek egyensúlyi tényezője nem -1 , 0 vagy 1.

Értsünk meg minden egyes lépést nagyon világosan:

Állapot Akció
AVL forgások Az A jobb oldali részfájába a C bal oldali részfájába egy B csomópont került be, ami miatt C 2-es egyensúlytényezővel rendelkező kiegyensúlyozatlan csomópont lett. Ez az eset L R elforgatás, ahol: A beszúrt csomópont a bal oldali részfájának jobb oldali részfájában található. C
AVL forgások Mivel LR forgatás = RR + LL forgatás, ezért először az RR-t (óramutató járásával ellentétes irányba) hajtjuk végre az A-ban gyökerező részfán. RR rotációval, csomópont A , a bal oldali részfája lett B .
AVL forgások Az RR forgatás végrehajtása után a C csomópont továbbra is kiegyensúlyozatlan, azaz 2-es egyensúlytényezővel rendelkezik, mivel a beillesztett A csomópont a bal vagy bal oldalon található. C
AVL forgások Most a teljes fán, azaz a C. csomóponton végezzük az LL óramutató járásával megegyező forgatást C most a B csomópont jobb oldali részfája lett, A pedig a B csomópont bal oldali részfája
AVL forgások Az egyes csomópontok egyensúlytényezője most vagy -1, 0 vagy 1, azaz a BST most kiegyensúlyozott.

4. RL forgatás

Mint már említettük, ez a kettős forgatás valamivel keményebb, mint az egyszeres forgatás, amelyet fentebb már kifejtettünk. RL forgatás = LL forgatás + RR forgatás, azaz először az LL forgatást részfán, majd az RR forgatást teljes fán hajtjuk végre, teljes fa alatt a beillesztett csomópont útvonalának első csomópontját értjük, amelynek egyensúlyi tényezője nem -1 , 0 vagy 1.

Állapot Akció
AVL forgások Egy csomópont B bekerült a bal oldali részfájába C a jobb oldali részfa A , ami miatt A kiegyensúlyozatlan csomóponttá vált, amelynek egyensúlyi tényezője - 2. Ez az eset az RL forgatás, ahol: A beszúrt csomópont az A jobb oldali részfájának bal oldali részfájában található
AVL forgások Mivel RL elforgatás = LL elforgatás + RR elforgatás, ezért LL (óramutató járásával megegyezően) a részfán gyökerezve C először kerül végrehajtásra. RR rotációval, csomópont C a megfelelő részfája lett B .
AVL forgások Az LL forgatás végrehajtása után a csomópont A még mindig kiegyensúlyozatlan, azaz -2 egyensúlytényezővel rendelkezik, ami az A jobb oldali részfa csomópont jobb részfájának köszönhető.
AVL forgások Most RR forgatást (óramutató járásával ellentétes forgatást) hajtunk végre teljes fán, azaz az A csomóponton. C most a B csomópont jobb oldali részfája lett, az A csomópont pedig a B csomópont bal oldali részfája.
AVL forgások Az egyes csomópontok egyensúlytényezője most vagy -1, 0 vagy 1, azaz a BST most kiegyensúlyozott.

K: Hozzon létre egy AVL fát a következő elemekkel

H, I, J, B, A, E, C, F, D, G, K, L

1. Szúrja be a H, I, J jeleket

AVL forgások

A fenti elemek beillesztésekor, különösen H esetén, a BST kiegyensúlyozatlanná válik, mivel a H egyensúlytényezője -2. Mivel a BST jobbra ferde, RR-elforgatást fogunk végrehajtani a H csomóponton.

Az eredményül kapott mérlegfa a következő:

AVL forgások

2. Szúrja be a B, A jeleket

cserélje ki a karakterláncot java-ban
AVL forgások

A fenti elemek beillesztésekor, különösen A esetén, a BST kiegyensúlyozatlanná válik, mivel H és I egyensúlytényezője 2, ezért az utoljára beillesztett csomópont első csomópontját, azaz H-t vesszük figyelembe. Mivel a H-ból származó BST balra ferde, LL forgatást hajtunk végre a H csomóponton.

Az eredményül kapott mérlegfa a következő:

AVL forgások

3. Illessze be az E-t

css-ben lebeg
AVL forgások

Az E beszúrásakor a BST kiegyensúlyozatlanná válik, mivel az I egyensúlytényezője 2, mivel ha E-ből I-be utazunk, azt találjuk, hogy az I jobb oldali részfájának bal oldali részfájába van beillesztve, akkor LR forgatást hajtunk végre az I csomóponton. LR = RR + LL forgás

3 a) Először RR forgatást hajtunk végre a B csomóponton

Az eredményül kapott fa RR forgatás után a következő:

AVL forgások

3b) Először LL forgatást végzünk az I csomóponton

Az eredményül kapott kiegyensúlyozott fa LL forgatás után:

AVL forgások

4. C, F, D beszúrása

AVL forgások

C, F, D beszúrásakor a BST kiegyensúlyozatlanná válik, mivel B és H egyensúlytényezője -2, mivel ha D-ből B-be utazunk, azt találjuk, hogy a B bal oldali részfájának jobb oldali részfájába van beillesztve, akkor végrehajtjuk. RL Forgatás az I. csomóponton. RL = LL + RR forgás.

4a) Először LL forgatást hajtunk végre az E csomóponton

Az eredményül kapott fa LL forgatás után a következő:

AVL forgások

4b) Ezután végrehajtjuk az RR forgatást a B csomóponton

c kód abs

Az eredményül kapott kiegyensúlyozott fa RR forgatás után:

AVL forgások

5. Illessze be a G-t

AVL forgások

G beszúrásakor a BST kiegyensúlyozatlanná válik, mivel a H egyensúlytényezője 2, mivel ha G-ből H-ba utazunk, azt találjuk, hogy a H jobb oldali részfájának bal oldali részfájába illesztjük be, akkor az I csomóponton LR-elforgatást hajtunk végre. LR = RR + LL forgás.

5 a) Először RR forgatást hajtunk végre a C csomóponton

Az eredményül kapott fa RR forgatás után a következő:

AVL forgások

5 b) Ezután LL forgatást végzünk a H csomóponton

Az eredményül kapott kiegyensúlyozott fa LL forgatás után:

AVL forgások

6. Illessze be a K betűt

AVL forgások

K beszúrásakor a BST kiegyensúlyozatlanná válik, mivel az I egyensúlytényezője -2. Mivel a BST jobbra ferde I-től K-ig, ezért RR-elforgatást hajtunk végre az I csomóponton.

Az eredményül kapott kiegyensúlyozott fa RR forgatás után:

AVL forgások

7. Illessze be az L betűt

Beszúrásakor az L fa továbbra is kiegyensúlyozott, mivel az egyes csomópontok egyensúlytényezője most vagy -1, 0, +1. Ezért a fa egy Balanced AVL fa

AVL forgások