Operacje insert/delete na drzewach AVL
Transkrypt
Operacje insert/delete na drzewach AVL
Operacje insert/delete na drzewach AVL Błażej Kucharczyk 1 lutego 2006 1 1 Wstęp Drzewo AVL jest drzewem wyszukiwań binarnych (BST), z tym że wysokość jego lewego i prawego poddrzewa różni się o co najwyżej 1. Wyszukiwanie elementu w drzewach AVL wykonuje się tak samo jak w normalnych BST, jednak operacje Insert i Delete mogą zaburzyć strukturę drzewa więc wymagają pewnych zmian. 2 Operacja Insert - wstawianie elementu Podczas wstawiania elementu do drzewa AVL początkowo postepujemy tak jak byśmy wstawiali element do normalnego drzewa BST. Jednak wykonie tej operacji może spowodować że naruszona zostanie struktura drzewa AVL, dlatego należy wykonać jeszcze kilka dodatkowych czynności. Procedura wstawiania nowego elementu będzie więc dwuetapowa. W pierwszym etapie węzeł wstawiany jest do drzewa w taki sam sposób, w jaki jest wstawiany do drzewa BST - nowy węzeł zostaje dodany jako liść w odpowiednim miejscu tak, by nie naruszyć własności drzewa BST. Dodanie nowego węzła może spowodować, że dla niektórych węzłów, należących do ścieżki przebytej podczas dodawania nowego węzła, nie będzie już spełniona własność zrównoważenia AVL. W drugim etapie, by naprawić ewentualne naruszenia własności AVL, algorytm powraca po tej samej ścieżce do korzenia, porównując wysokość lewego i prawego poddrzewa każdego węzła, przez który przechodzi. Jeśli różnica jest większa niż 1, wykonywana jest rotacja przywracająca własność AVL. Rotacja zmienia topologię drzewa w taki sposób, że przywrócona zostaje własność zrównoważenia drzewa AVL przy równoczesnym zachowaniu własności drzewa wyszukiwań binarnych. 2.1 Rotacje Istnieją 4 typy rotacji: pojedyńcza prawa rotacja pojedyńcza lewa rotacja wykonywana jest symetrycznie do pojedyńczej prawej rotacji. podwójna prawa rotacja podwójna lewa rotacja wykonywana analogicznie do podwójnej prawej rotacji Rotacja pozostawia drzewo o tej samej wysokości co przed dodaniem elementu, zatem cała operacja nie narusza własności AVL z punktu widzenia nadrzędnych elementów w drzewie. 2.2 Przykład Na rysunku przedstawione jest drzewo AVL do którego chcemy wstawić nowy element o wartości 3. Po wstawieniu okazało się że nowe drzewo nie spełnia własności drzewa AVL (węzeł o wartości 5 ma balans równy 2). W tym przypadku wykonamy pojedyńczą prawą rotacje aby naprawić drzewo. 2 W wyniku otrzymujemy naprawione drzewo AVL. 3 Operacja Delete - usuwanie elementu Usuwanie elementu z drzewa AVL jest zrealizowane analogicznie jednak może wymagać nieco więcej rotacji. Element jest usuwany procedurą rekurencyjną, i po powrocie z wywołań rekurencyjnych na kolejnych poziomach aktualizowane jest pole balans, a w razie potrzeby wykonywana jest odpowiednia rotacja. Jednak w przypadku usuwania węzłów rotacja nie pozostawia drzewa o tej samej wysokości, co przed usunięciem węzła, a o 1 niższe. Dlatego jednorazowe wykonanie rotacji nie kasuje do końca zaburzenia, które propaguje się dalej i na wyższych poziomach mogą byą konieczne kolejne rotacje. Skrajnym przykładem takiej sytuacji jest ”ekstremalne” drzewo AVL, które na każdym poziomie posiada maksymalne niezrównoważenie dopuszczalne przez własność AVL. Usunięcie w tym drzewie węzła z niższej gałęzi drzewa powoduje kaskadę rotacji na wszystkich poziomach. Usunięcie elementu ”A” spowoduje naruszenie równowagi w węźle ”B”. Aby to skorygować należy wykonać lewą rotację wynoszącą element ”C” w górę, a element ”B” w dół, i zmniejszającą w efekcie wysokość drzewa ”B-C-D”. To jednak powoduje naruszenie równowagi w węźle ”E” i konieczność ponownej lewej rotacji wynoszącej do góry węzeł ”H”. Wysokość tego poddrzewa maleje, i może z kolei spowodować naruszenie równowagi w następnym węźle ”M” co znów zmusza algorytm do wykonania rotacji... 3 4 Podsumowanie Drzewa AVL nie są prosta strukturą. Implementacja algroytmów wstawiania i usuwania wymaga trochę wysiłku, jednak w zamian drzewa AVL gwarantują że wszystkie operacje słownikowe wykonywane będą w czasie ograniczonym funkcją liniową od wysokości drzewa czyli O(log n). 4