ALGORYTMY
I STRUKTURY DANYCH
Temat 6:
Drzewa BST, AVL
Wykładowca: dr inż. Zbigniew TARAPATA
e-mail: Zbigniew.Tarapata@isi.wat.edu.pl
http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/
Współautorami wykładu są: A.Najgebauer, D.Pierzchała
Wykład : Algorytmy przetwarzania struktur
drzewiastych
drzewa poszukiwań binarnych;
podstawowe operacje na drzewach BST;
drzewa AVL;
algorytmy rotacji;
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
2
1
Przypomnienie – struktura drzewiasta
Drzewiastą strukturą danych nazywamy strukturę
danych S=(D, R, e), w której relacja porządkująca N
opisuje kolejne, rekurencyjne powiązania pomiędzy
danymi elementarnymi drzewa, tworzącymi kolejne
„poddrzewa”.
Przykład struktury drzewiastej
Uniwersytet
Wydział
Instytut
Wydział
Instytut
Wydział
Instytut
Wydział
Instytut
Instytut
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
3
Element struktury drzewiastej
Element drzewa zawiera:
Dane elementarne,
Realizację relacji następstwa – dowiązania do
następników;
Korzeń
Dane
Dowiązanie na
lewego potomka
Dowiązanie na
prawego potomka
Przodek
Potomek
Liść
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
4
2
Drzewa poszukiwań binarnych
Wysokość węzła x:
Największa liczba węzłów na drodze prostej z węzła
x do liści (bez węzła x);
Inaczej jest to liczba krawędzi na tej drodze;
Wysokość drzewa:
Wysokość korzenia;
Wpływa na złożoność operacji na drzewie;
Głębokość węzła x:
Największa liczba węzłów na drodze prostej z
korzenia do węzła x (bez korzenia);
Inaczej jest to liczba krawędzi na tej drodze;
Głębokość drzewa:
Głębokość najodleglejszego liścia;
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
5
Drzewa poszukiwań binarnych
Drzewo binarne:
Każdy węzeł ma co najwyżej dwóch potomków;
Zupełne drzewo binarne (dwójkowe):
Każdy węzeł, z wyjątkiem liści, ma dokładnie dwóch
potomków niepustych;
Drzewo poszukiwań binarnych (BST):
Dla każdego węzła (nie liścia) wszystkie wartości
przechowywane w lewym poddrzewie są mniejsze od jego
wartości oraz przeciwnie dla drzewa prawego;
Drzewo binarne zrównoważone:
Dla każdego węzła różnica wysokości obu poddrzew
wynosi co najwyżej 1;
Drzewo doskonale zrównoważone:
Wszystkie liście znajdują się na jednym poziomie;
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
6
3
Drzewa poszukiwań binarnych
Ograniczenia w drzewie poszukiwań binarnych (BST):
Podstawowe operacje realizują się szybko, dzięki
symetrycznemu porządkowi;
Jeśli jednak będziemy do drzewa wstawiać elementy np.
posortowane, drzewo rozrośnie się w jedną ze stron (może
w skrajnym przypadku być zdegenerowane do listy
powiązanej);
Wtedy złożoność przeszukiwania (a tym samym
wszystkich innych operacji) jest liniowa: O(n);
Aby równoważyć drzewa BST wymyślono ich różne
odmiany, np. drzewa AVL, czerwono-czarne, splay;
Dzięki zrównoważeniu nie stracimy podstawowej zalety
struktury drzewiastej: złożoności obliczeniowej mniejszej
niż liniowa;
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
7
Drzewa poszukiwań binarnych
Lemat 1
Liczba węzłów w drzewie doskonale zrównoważonym
wynosi: 2h+1-1;
Dowód (przez indukcję)
Przyjmijmy, że dowolny poziom mają numer l, l=1..h;
Liczba wszystkich węzłów wynosi:
h
∑2
l
= 2h +1 − 1
l =0
Przez indukcję:
0
dla 0:
∑2
l
= 20 = 1 ⇔ 20+1 − 1 = 2 − 1 = 1
l =0
H +1
H
l =0
l =0
H +1
l
l
H +1
− 1 + 2 H +1 = 2 H + 2 − 1
a dla H+1: ∑ 2 = ∑ 2 + 2 = 2
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
8
4
Drzewa AVL
Drzewo AVL (1962 – Adelson-Velskii, Landis)
Drzewo AVL jest rozwinięciem drzewa BST;
Dla każdego wierzchołka w drzewie AVL wysokości
dwóch poddrzew różnią się o co najwyżej 1 poziom;
Węzeł oprócz pól danych, lewego i prawego
dowiązania ma też pole opisujące różnicę wysokości
lewego i prawego poddrzewa;
)
z definicji wynika, że to pole może mieć wartość z podzbioru
{-1, 0, 1};
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
9
Operacje na drzewie AVL
Wyszukanie:
drzewo AVL jest też drzewem BST, zatem operacja
wygląda tak jak dla drzew BST;
Wstawianie:
polega na wyszukaniu miejsca w drzewie a potem
wstawieniu elementu (jak w BST);
ponieważ podczas operacji struktura drzewa zmienia
się i może nie zostać zachowany warunek AVL (o
różnicy w wysokości poddrzew), trzeba tę strukturę
przywrócić;
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
10
5
Operacje na drzewie AVL
Usuwanie:
polega na wyszukaniu elementu w drzewie a potem jego
usunięciu (patrz BST)
podczas operacji należy utrzymać zrównoważoną strukturę
drzewa (j.w.);
Rotacja:
zmiana konfiguracji węzłów;
celem jest przywrócenie struktury drzewa AVL;
wyróżniamy rotacje:
)
lewe i prawe,
)
pojedyncze i podwójne;
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
11
Operacje na drzewie AVL
Obliczanie wag wierzchołków:
Dla każdego wierzchołka drzewa:
w( x) = h(LD) - h(PD),
gdzie LD i PD są odpowiednio lewym i prawym
poddrzewem drzewa o korzeniu w x;
6 0
Pamiętaj!
+1
Drzewo BST jest drzewem AVL
Ù
dla każdego wierzchołka w:
w(x) ∈{-1, 0, +1}
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
5
9 0
0 2
0
8
12
0
12
6
Operacje na drzewie AVL
Wstawianie – niespełniony warunek AVL:
Wstawienie nowego elementu do drzewa BST może
zwiększyć wysokość poddrzewa (wymagana rotacja);
+1
6
0
+2
+1
-1
0
0
9 0
5
2
0
0
0
0 8
12
3
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
13
Operacje na drzewie AVL
Usuwanie – niespełniony warunek AVL:
Usunięcie elementu z drzewa BST może zmniejszyć
wysokość poddrzewa (wymagana rotacja)!
6
5
9
8
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
-2
-1
0
12
14
7
Operacje na drzewie AVL
Rotacja:
Lewa rotacja (lub „w lewo”):
)
Polega na obrocie 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;
y
x
x
c
a
b
a
y
b
c
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
15
Operacje na drzewie AVL
Rotacja:
Prawa rotacja (lub „w prawo”):
)
Działa symetrycznie do lewej rotacji;
Rotację rozpoczynamy od węzła z wagą równą ± 2;
)
Kierunek zależy od znaku;
Przy wstawianiu elementu do drzewa AVL musimy
wykonać co najwyżej 1 rotację;
Przy usuwaniu elementu z AVL może się zdarzyć, że
będziemy musieli wykonać tyle rotacji ile jest poziomów
w drzewie;
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
16
8
Operacje na drzewie AVL
Rotacja lewa wokół B:
0
B -2
Z
-1
0 B
A
Y
A
X
X
Z
Y
!
*!
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
17
Operacje na drzewie AVL
Rotacja prawa wokół B:
B
+1 A
X
+2
Z
A
0
B 0
X
Y
Y
Z
!
*!
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
18
9
Operacje na drzewie AVL
Rotacja lewa wokół A i prawa wokół C:
+2
C
-1 A
B
A 0
U
B +1
X
Y
0
X
C -1
Y
U
Z
Z
*!
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
19
Operacje na drzewie AVL
Rotacja prawa wokół A i lewa wokół C:
0
C -2
C
A +1
U
-1 B
Z
X
U
B
0 A
Z
Y
X
Y
!
*!
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
20
10
Operacje na drzewie AVL
Przykład – rotacja pojedyncza: AVL spełniony
3
3
1
1
5
2
4
7
7
5
2
6
9
4
9
6
8
x
y
y
x
A
B
8
C
A
C
B
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
21
Operacje na drzewie AVL
Przykład – rotacja pojedyncza: AVL niespełniony
3
3
1
5
2
1
4
8
6
x
8
5
2
9
4
y
7
y
9
6
7
x
A
C
B
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
C
A
B
22
11
Operacje na drzewie AVL
Jeszcze jeden przykład – rotacja podwójna: AVL
spełniony
-1 5
+1 3
2
-1 5
Usunięcie 4
4
9
-1
+1 3
+2
11 -1
7
1
6
8
10
13
12
-2 5
0
2
1
9
3
8
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
10
13
12
09
14
0
5
11
2
11 -1
7
6
1
Co teraz?
-1
Rotacja wokół 3
2
1
7
3
6
-1
10
8
13
12
-1
14
Po rotacji wokół 5
14
23
Operacje na drzewie AVL
Koszt operacji wstawiania i usuwania w 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:
)
minimalna liczba 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ć przez
indukcję, że Nh ≥ 2 h/2
h-1 PD
LD
Stąd h ≤ 2 lg Nh
Liczba rotacji (koszt operacji) wynosi co najwyżej ‘lg n’;
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
h-2
24
12
Dziękuję za uwagę
Z.Tarapata, Algorytmy i struktury danych, wykład nr 6
13