You are on page 1of 28

Drzewa AVL

■ Drzewo AVL (1962 – Adelson-Velskii, Landis)


◆ Drzewo AVL jest rozwinięciem drzewa BST
(z zachowaniem wszystkich jego własności);
◆ Dla każdego wierzchołka w drzewie AVL wysokości jego
dwóch poddrzew (lewego i prawego) o korzeniu w tym
wierzchołku różnią się co najwyżej o 1;
◆ Węzeł oprócz pól danych oraz lewego i prawego wskaźnika ma
też pole opisujące różnicę wysokości lewego i prawego
poddrzewa;
■ Z definicji wynika, że to pole może
6 mieć wartość ze zbioru
w( x) = h(LD) − 0
{-1, 0, 1};
h(PD) +1

5 9 0
Drzewo AVL

0
2 12
0
8 0

Algorytmy i struktury danych 1


Obliczanie wag wierzchołków
drzewa AVL

◆ Dla każdego wierzchołka drzewa x współczynnik


zrównoważenia w(x) ma postać
w( x) = h(LD) - h(PD),
gdzie LD i PD są odpowiednio lewym i prawym poddrzewem
o korzeniu x; -1
H
Drzewo BST jest drzewem AVL
 +2
C M
dla każdego wierzchołka x: 0 +1
w(x) ∈{-1, 0, +1} A -1
J
W jakiej kolejności dodawano poszczególne
wartości do drzewa? 0
K
Algorytmy i struktury danych 2
Operacje na drzewie AVL

■ Wyszukiwanie:
◆ ponieważ drzewo AVL jest też drzewem BST, ta
operacja wygląda tak jak dla drzew BST;

■ Wstawianie:
◆ polega na wyszukaniu miejsca w drzewie, a
następnie wstawieniu elementu (jak w BST);
◆ ponieważ podczas operacji struktura drzewa zmienia
się
i może nie zostać zachowany warunek AVL
(dotyczący różnicy w wysokości poddrzew), trzeba tę
strukturę przywrócić (wymagana tzw. rotacja);

Algorytmy i struktury danych 3


Operacje na drzewie AVL
0 6
Drzewo wyjściowe
Dodajemy węzeł z wartością 3
+1 0
5 +1
9
6
0 0
2
0 12
+2 0
8 5 9
Jak przywrócić równowagę? -1
0
2 0
12
8
0
drzewo z nowym węzłem 3

Algorytmy i struktury danych 4


Operacje na drzewie AVL

■ Usuwanie:
◆ polega na wyszukaniu elementu w drzewie a potem
jego usunięciu (patrz BST)
◆ może zajść potrzeba przywrócenia zrównoważonej
struktury drzewa (wymagana rotacja);

Algorytmy i struktury danych 5


Operacje na drzewie AVL

Rotacja:
◆ zmiana konfiguracji węzłów;
◆ celem jest przywrócenie struktury drzewa
AVL;
◆ wyróżniamy rotacje:
✦ lewe i prawe,
✦ pojedyncze i podwójne;

Algorytmy i struktury danych 6


Operacje na drzewie AVL

■ Usuwanie – niespełniony warunek AVL


◆ Usunięcie elementu z drzewa BST może zmniejszyć
wysokość poddrzewa (wymagana rotacja)!

-1 -2
6 6

0 W jaki sposób zrównoważyć


0 otrzymane drzewo? 0
5 9 9

0 0
0 12 0 12
8 8
Algorytmy i struktury danych 7
Operacje na drzewie AVL

W jaki sposób zrównoważyć


otrzymane drzewo?

-2 -1 1
6 9 9

0 0 0
9 12 12
-1 6 8
1
0
0 12
8 0 8 6 0

Algorytmy i struktury danych 8


Operacje na drzewie AVL
◆ Lewa rotacja (lub „rotacja w lewo”) węzła y wokół
węzła x
✦ Polega na obrocie węzła y wokół wyróżnionego węzła x
przeciwnie do ruchu wskazówek zegara;
✦ W wyniku rotacji węzeł y staje się nowym korzeniem
poddrzewa, węzeł x zostaje jego lewym synem, a lewy
syn węzła y zostaje prawym synem węzła x;
✦ Można ją wykonać, jeżeli prawy syn węzła y nie jest
NULL;
x y

α y x γ

γ β
β α
Algorytmy i struktury danych 9
Operacje na drzewie AVL
◆ Prawa rotacja (lub „rotacja w prawo”) węzła x wokół
węzła y:
✦ Polega na obrocie węzła x wokół wyróżnionego węzła y
zgodnie z ruchem wskazówek zegara;
✦ W wyniku rotacji węzeł x staje się nowym korzeniem
poddrzewa, węzeł y zostaje jego prawym synem, a
prawy syn węzła x zostaje lewym synem węzła y;
✦ Można ją wykonać, jeżeli lewy syn węzła x nie jest
NULL;
y x

x γ α y

β γ
α β
Algorytmy i struktury danych 10
Operacje na drzewie AVL

■ Rotacja:
◆ Lewa i prawa rotacja działają symetrycznie

LeftRotate(T, y)
x y

α y x γ
RightRotate(T, x)

γ β
β α

Algorytmy i struktury danych 11


Operacje na drzewie AVL

◆ Przykład – rotacja pojedyncza: warunek AVL


spełniony 3 3
0
1 5 -2 1 7
2 4 7 2 5 9
6 9 4 6 8
8
x y
y x
A C
B C A B

Algorytmy i struktury danych 12


Operacje na drzewie AVL

◆ Przykład – rotacja pojedyncza: warunek AVL


3
niespełniony 3
+2
1 5 -2 1 8

2 4 8 2 5 9

6 9 4 6
x 7 y 7
y x Co dalej?
A C
B C A B

Algorytmy i struktury danych 13


Operacje na drzewie AVL
Jeszcze jeden przykład – rotacja podwójna: warunek AVL
spełniony -1 5
-1 5

+1 3 -1
9 +1 3
+2
2 4 7 11 -1 2
1 6 8 10 13 1 Rotacja 2 wokół
3
-2 5 12 14
0 9

0 2 -1 Co teraz? -1
9 0 5 11
1 3 7 11 -1 2 7 10 0
13
6 8 10 13 6 8 12 14
1 3
12 14 Po rotacji 9
Algorytmy i struktury danych
wokół 5 14
Operacje na drzewie AVL

◆ Po wstawieniu elementu do drzewa AVL musimy


wykonać co najmniej 1 rotację w celu jego
zrównoważenia;
◆ Rotację rozpoczynamy od węzła z wagą równą ± 2;
◆ Przypadki charakterystyczne:
1. wstawienie węzła do prawego poddrzewa prawego
następnika
2. wstawienie węzła do lewego poddrzewa lewego
następnika
3. wstawienie węzła do lewego poddrzewa prawego
następnika
4. wstawienie węzła do prawego poddrzewa lewego
następnika
Algorytmy i struktury danych 15
1. Wstawienie węzła do prawego poddrzewa
prawego następnika

■ Rotacja lewa węzła A wokół B:

0
B -2 A
0 B
Z A -1
X
Y X Z Y

h
h+1
h h h
h+1 !
*!
Algorytmy i struktury danych 16
2. Wstawienie węzła do lewego poddrzewa
lewego następnika

■ Rotacja prawa węzła A wokół B:

+2 0
B A

+1 A B 0
Z X
X Y Y Z

h
h+
h h
h+ h *1
1
*
Algorytmy i struktury danych 17
3. Wstawienie węzła do lewego poddrzewa
prawego następnika

■ Rotacja lewa węzła B wokół A i prawa węzła B


wokół C:
+2 Stan po pierwszej rotacji? 0
C B

-1 A A 0 C -1
U

X B +1 X Y U
Z
Y Z
h h-1

h h-1 h h h
h

*!
Algorytmy i struktury danych 18
4. Wstawienie węzła do prawego poddrzewa
lewego następnika

■ Rotacja lewa węzła B wokół A i prawa węzła B


wokół C:
Stan po pierwszej rotacji? 0
C -2 B

A +1 +1 C 0 A
U
-1 B U
X Z Y X

Z Y
h h-1
h h
h-1 h h h
*
**
Algorytmy i struktury danych 19
Równoważenie drzewa AVL po
wstawieniu węzła
Przykład
P
P P
-2
-1 -2

Q Q
Q
+1
0 +1
h h
h
R
-1
h
h h h
h+1

h-
Wstawienie nowego węzła do lewego 1 h
poddrzewa węzła Q

Algorytmy i struktury danych 20


Równoważenie drzewa AVL po
wstawieniu węzła
Przykład (cd.)
P R
-2 P 0
-2

P Q
Q R
-2 +1 0
+1
h h

Q
R h-
-1 h- 0
h 1 h h
h 1

h- h h
1 h

Rotacja węzła R dookoła Q i wokół węzła P


Algorytmy i struktury danych 21
Operacje na drzewie AVL

◆ Po usunięciu elementu z drzewa AVL może się


zdarzyć,
że w celu jego zrównoważenia należy wykonać tyle
rotacji, ile jest poziomów w drzewie;

Algorytmy i struktury danych 22


Operacje na drzewie AVL
■ Koszt operacji wstawiania i usuwania w drzewie AVL:
◆ Rotacje działają w czasie O(1)
◆ Zmieniają tylko wartości wskaźników a pozostałe pola
węzłów są bez zmian;
◆ Dla drzewa o n wierzchołkach:
✦ Jaka jest minimalna liczba n wierzchołków w drzewie AVL o
wysokości h?
n0=1
n h= n h-1 + n h-2 +1
h
Można udowodnić, że:
h-1 PD h-2
log2(n+1) ≤ h ≤ 2 log2n LD

◆ Liczba rotacji (koszt operacji) wynosi co najwyżej log2n;


Algorytmy i struktury danych 23
Równoważenie drzewa AVL po
usunięciu węzła
Dalsze przykłady

P P Q
-1 -2 0

Q Q P
-1 h- -1 0
h
1

h- h- h-
h-1
1 h h 1 1 h

Przypadek 1 (pojedyncza rotacja)


Algorytmy i struktury danych 24
Równoważenie drzewa AVL po
usunięciu węzła

P P Q
-1 -2 +1

Q Q P
0 h- 0 -1
h
1

h-
h h h h 1 h h

Przypadek 2 (pojedyncza rotacja)


Algorytmy i struktury danych 25
Równoważenie drzewa AVL po
usunięciu węzła

P P R
-1 -2 0

Q P Q
Q
+1 +1 0 -1
h-
h
1

R R h-
+1 +1 h- h- 2 h-
h- h-
1 1 1 1 1

h-
h- Przypadek 3 (podwójna rotacja)
2
1

Algorytmy i struktury danych 26


Równoważenie drzewa AVL po
usunięciu węzła

P P R
-1 -2 0

Q P Q
Q
+1 +1 +1 0
h h-1

R R
-1 -1 h-2
h-1 h-1 h-1 h-1 h-1

h-2 h-2
h-1 Przypadek 4 (podwójna rotacja)
h-1

Algorytmy i struktury danych 27


Algorytmy i struktury danych 28

You might also like