logo

AVL puu

AVL Treen keksivät GM Adelson - Velsky ja EM Landis vuonna 1962. Puu on nimetty AVL:ksi sen keksijöiden kunniaksi.

AVL-puu voidaan määritellä korkeudeltaan tasapainotetuksi binäärihakupuuksi, jossa jokainen solmu liittyy tasapainokertoimeen, joka lasketaan vähentämällä sen oikean alipuun korkeus vasemman alipuun korkeudesta.

Puun sanotaan olevan tasapainossa, jos kunkin solmun tasapainokerroin on välillä -1:stä 1:een, muuten puu on epätasapainossa ja se on tasapainotettava.

Tasapainokerroin (k) = korkeus (vasen(k)) - korkeus (oikea(k))

Jos minkä tahansa solmun tasapainokerroin on 1, se tarkoittaa, että vasen alipuu on yhden tason korkeampi kuin oikea alipuu.

Jos minkä tahansa solmun tasapainokerroin on 0, se tarkoittaa, että vasemman ja oikean alipuun korkeus on yhtä suuri.

Jos minkä tahansa solmun tasapainokerroin on -1, se tarkoittaa, että vasen alipuu on yhden tason alempana kuin oikea alipuu.

AVL-puu on esitetty seuraavassa kuvassa. Näemme, että kuhunkin solmuun liittyvä tasapainokerroin on välillä -1 ja +1. siksi se on esimerkki AVL-puusta.

AVL puu

Monimutkaisuus

Algoritmi Keskimääräinen tapaus Pahimmassa tapauksessa
Avaruus päällä) päällä)
Hae o(log n) o(log n)
Lisää o(log n) o(log n)
Poistaa o(log n) o(log n)

Toiminnot AVL-puussa

Koska AVL-puu on myös binäärihakupuu, kaikki toiminnot suoritetaan samalla tavalla kuin ne suoritetaan binäärihakupuussa. Etsiminen ja poikki ei johda AVL-puun ominaisuuden rikkomiseen. Lisäys ja poistaminen ovat kuitenkin toimintoja, jotka voivat rikkoa tätä ominaisuutta, ja siksi niitä on tarkasteltava uudelleen.

SN Operaatio Kuvaus
1 Lisäys Lisäys AVL-puuhun suoritetaan samalla tavalla kuin se suoritetaan binäärihakupuussa. Se voi kuitenkin johtaa AVL-puuomaisuuden rikkomiseen ja siksi puu saattaa tarvita tasapainotusta. Puu voidaan tasapainottaa pyörittämällä.
2 Poistaminen Poistaminen voidaan myös suorittaa samalla tavalla kuin se tehdään binäärihakupuussa. Poistaminen voi myös häiritä puun tasapainoa, joten puun tasapainottamiseen käytetään erilaisia ​​pyörityksiä.

Miksi AVL Tree?

AVL-puu ohjaa binäärihakupuun korkeutta siten, ettei se anna sen olla vinossa. Aika, joka kuluu kaikkiin operaatioihin binäärihakupuussa, jonka korkeus on h Vai niin) . Sitä voidaan kuitenkin laajentaa Päällä) jos BST tulee vinoon (eli pahimmassa tapauksessa). Rajoittamalla tämän korkeuden log n:ään, AVL-puu asettaa ylärajan kullekin olla-operaatiolle O(log n) missä n on solmujen lukumäärä.

AVL Rotations

Suoritamme kiertoa AVL-puussa vain siinä tapauksessa, että Balance Factor on muu kuin -1, 0 ja 1 . Periaatteessa on neljä kiertotyyppiä, jotka ovat seuraavat:

  1. L L -kierto: Lisätty solmu on A:n vasemman alipuun vasemmassa alipuussa
  2. R R -kierto : Lisätty solmu on A:n oikean alipuun oikeassa alipuussa
  3. L R -kierto : Lisätty solmu on A:n vasemman alipuun oikeassa alipuussa
  4. R L -kierto: Lisätty solmu on A:n oikean alipuun vasemmassa alipuussa

Missä solmu A on solmu, jonka saldotekijä on muu kuin -1, 0, 1.

Ensimmäiset kaksi kiertoa LL ja RR ovat yksittäiskiertoja ja seuraavat kaksi kiertoa LR ja RL ovat kaksoiskierroksia. Jotta puu olisi epätasapainossa, minimikorkeuden on oltava vähintään 2. Ymmärrämme jokaisen kierroksen

1. RR-kierto

Kun BST tulee epätasapainoiseksi, koska A:n oikean alipuun oikeaan alipuuhun lisätään solmu, suoritetaan RR-kierto, RR-kierto on vastapäivään kierto, jota sovelletaan solmun alapuolelle, jonka tasapainokerroin on -2.

AVL Rotations

Yllä olevassa esimerkissä solmulla A on tasapainokerroin -2, koska solmu C on lisätty oikean alipuun A oikeaan alipuuhun. Suoritamme RR-kierron A:n alapuolella olevalle reunalle.

2. LL-kierto

Kun BST tulee epätasapainoiseksi, koska C:n vasemman alipuun vasempaan alipuuhun lisätään solmu, suoritetaan LL-kierto, LL-kierto on myötäpäivään kiertoa, jota sovelletaan solmun alapuolelle, jolla on tasapainokerroin 2.

AVL Rotations

Yllä olevassa esimerkissä solmulla C on tasapainotekijä 2, koska solmu A on lisätty C:n vasemman alipuun vasempaan alipuuhun. Suoritamme LL-kierron A:n alapuolella olevalle reunalle.

3. LR-kierto

Kaksoiskierrokset ovat hieman kovempaa kuin yksikierto, joka on jo selitetty edellä. LR-kierto = RR-kierto + LL-kierto, eli ensin RR-kierto suoritetaan alipuulle ja sitten LL-kierto koko puulle, täydellä puulla tarkoitamme ensimmäistä solmua lisätyn solmun polulta, jonka tasapainokerroin on muu kuin -1 , 0 tai 1.

Ymmärtäkäämme jokainen askel hyvin selvästi:

Osavaltio Toiminta
AVL Rotations A:n oikeaan alipuuhun C:n vasempaan alipuuhun on lisätty solmu B, minkä vuoksi C:stä on tullut epätasapainoinen solmu, jolla on tasapainokerroin 2. Tämä tapaus on L R -kierto, jossa: Lisätty solmu on vasemman alipuun oikeassa alipuussa. C
AVL Rotations Koska LR-kierto = RR + LL-kierto, RR (vastapäivään) suoritetaan ensin A:sta juurtuneessa alipuussa. Tekemällä RR-kiertoa, solmu A , on tullut kohteen vasen alipuu B .
AVL Rotations RR-kierron suorittamisen jälkeen solmu C on edelleen epätasapainossa, eli sillä on tasapainotekijä 2, koska lisätty solmu A on vasemmalla tai vasemmalla. C
AVL Rotations Nyt suoritetaan LL myötäpäivään kierto täydessä puussa, eli solmun C. solmussa C on nyt tullut solmun B oikea alipuu, A on B:n vasen alipuu
AVL Rotations Jokaisen solmun tasapainokerroin on nyt joko -1, 0 tai 1, eli BST on nyt tasapainotettu.

4. RL-kierto

Kuten jo mainittiin, kaksoiskierrokset ovat hieman kovempaa kuin yksikierto, joka on jo selitetty edellä. RL-kierto = LL-kierto + RR-kierto, eli ensin LL-kierto suoritetaan alipuulle ja sitten RR-kierto koko puulle, täydellä puulla tarkoitamme ensimmäistä solmua lisätyn solmun polulta, jonka tasapainokerroin on muu kuin -1 , 0 tai 1.

Osavaltio Toiminta
AVL Rotations Solmu B on lisätty kohteen vasempaan alipuuhun C oikea alipuu A , jonka vuoksi A:sta on tullut epätasapainoinen solmu, jonka tasapainokerroin - 2. Tämä tapaus on RL-kierto, jossa: Lisätty solmu on A:n oikean alipuun vasemmassa alipuussa
AVL Rotations Koska RL-kierto = LL-kierto + RR-kierto, siis LL (myötäpäivään) alipuussa, jonka juuret ovat C suoritetaan ensin. Tekemällä RR-kiertoa, solmu C on tullut oikea alipuu B .
AVL Rotations Kun LL-kierto on suoritettu, solmu A on edelleen epätasapainossa, eli sillä on tasapainokerroin -2, mikä johtuu oikeanpuoleisen alipuusolmun A oikeasta alipuusta.
AVL Rotations Nyt suoritetaan RR-kierto (vastapäivään) täydelle puulle, eli solmulle A. solmu C on nyt tullut solmun B oikea alipuu ja solmusta A on tullut B:n vasen alipuu.
AVL Rotations Jokaisen solmun tasapainokerroin on nyt joko -1, 0 tai 1, eli BST on nyt tasapainotettu.

K: Muodosta AVL-puu, jossa on seuraavat elementit

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

1. Lisää H, I, J

AVL Rotations

Kun yllä olevat elementit lisätään, erityisesti H:n tapauksessa, BST tulee epätasapainoiseksi, koska H:n tasapainokerroin on -2. Koska BST on oikealle vino, suoritamme RR-kierron solmussa H.

Tuloksena oleva tasapainopuu on:

AVL Rotations

2. Lisää B, A

AVL Rotations

Yllä olevia elementtejä lisättäessä, erityisesti A:n tapauksessa, BST tulee epätasapainoiseksi, koska H:n ja I:n tasapainotekijä on 2, otetaan huomioon viimeksi lisätyn solmun ensimmäinen solmu eli H. Koska H:n BST on vasemmalle vino, Suoritamme LL Rotationin solmussa H.

Tuloksena oleva tasapainopuu on:

AVL Rotations

3. Aseta E

AVL Rotations

Lisättäessä E, BST tulee epätasapainoiseksi, koska I:n tasapainokerroin on 2, koska jos kuljemme paikasta E paikkaan I, huomaamme, että se on lisätty I:n oikean alipuun vasempaan alipuuhun, suoritamme LR-kierron solmulle I. LR = RR + LL kierto

3 a) Suoritamme ensin RR-rottamisen solmulle B

Tuloksena oleva puu RR-kierron jälkeen on:

AVL Rotations

3b) Suoritamme ensin LL-rotaatio solmulle I

Tuloksena oleva tasapainoinen puu LL-kierron jälkeen on:

AVL Rotations

4. Lisää C, F, D

AVL Rotations

Lisättäessä C, F, D, BST tulee epätasapainoiseksi, koska B:n ja H:n tasapainokerroin on -2, koska jos kuljemme D:stä B:hen, huomaamme, että se on lisätty B:n vasemman alipuun oikeaan alipuuhun, suoritamme RL Rotaatio solmussa I. RL = LL + RR kierto.

4a) Suoritamme ensin LL-kierron solmulle E

Tuloksena oleva puu LL-kierron jälkeen on:

AVL Rotations

4b) Suoritamme sitten RR-rottamisen solmulle B

asetettu javassa

Tuloksena oleva tasapainoinen puu RR-kierron jälkeen on:

AVL Rotations

5. Aseta G

AVL Rotations

Lisättäessä G, BST tulee epätasapainoiseksi, koska H:n tasapainokerroin on 2, koska jos kuljemme G:stä H:hen, huomaamme, että se lisätään H:n oikean alipuun vasempaan alipuuhun, suoritamme LR-kierron solmussa I. LR = RR + LL kierto.

5 a) Suoritamme ensin RR-rotaatio solmussa C

Tuloksena oleva puu RR-kierron jälkeen on:

AVL Rotations

5 b) Suoritamme sitten LL-rotaatio solmulle H

Tuloksena oleva tasapainoinen puu LL-kierron jälkeen on:

AVL Rotations

6. Lisää K

AVL Rotations

Lisättäessä K, BST tulee epätasapainoiseksi, koska I:n saldotekijä on -2. Koska BST on vinossa I:stä K:hen, suoritamme RR-kierron solmulle I.

Tuloksena oleva tasapainoinen puu RR-kierron jälkeen on:

AVL Rotations

7. Aseta L

Lisättäessä L-puu on edelleen tasapainossa, koska kunkin solmun tasapainokerroin on nyt joko -1, 0, +1. Tästä syystä puu on tasapainoinen AVL-puu

AVL Rotations