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