algorytmy i struktury danych

advertisement
ALGORYTMY
I STRUKTURY DANYCH
Temat 6:
Drzewa BST, AVL
Wykładowca: dr inż. Zbigniew TARAPATA
e-mail: [email protected]
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
Download