Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Podobne dokumenty
Drzewo. Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane składa się z węzłów, które zawierają następujące pola:

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

Porządek symetryczny: right(x)

Wysokość drzewa Głębokość węzła

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Sortowanie bąbelkowe

Wykład 6. Drzewa poszukiwań binarnych (BST)

ALGORYTMY I STRUKTURY DANYCH

Podstawy Informatyki. Metody dostępu do danych

Wykład 2. Drzewa poszukiwań binarnych (BST)

Algorytmy i struktury danych. wykład 5

Algorytmy i Struktury Danych

Drzewa podstawowe poj

Wykład 8. Drzewa AVL i 2-3-4

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Algorytmy i Struktury Danych

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Algorytmy i Struktury Danych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i Struktury Danych.

Drzewa poszukiwań binarnych

Drzewa poszukiwań binarnych

Listy, kolejki, stosy

ALGORYTMY I STRUKTURY DANYCH

Drzewa czerwono-czarne.

Teoretyczne podstawy informatyki

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Drzewa wyszukiwań binarnych (BST)

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Wykład 3. Drzewa czerwono-czarne

Kolejka priorytetowa. Często rozważa się kolejki priorytetowe, w których poszukuje się elementu minimalnego zamiast maksymalnego.

Algorytmy i struktury danych

PODSTAWY INFORMATYKI wykład 6.

Algorytmy i struktury danych

Drzewa AVL definicje

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Tadeusz Pankowski

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Teoretyczne podstawy informatyki

ALGORYTMY I STRUKTURY DANYCH

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Koszt zamortyzowany. Potencjał - Fundusz Ubezpieczeń Kosztów Algorytmicznych

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Lista liniowa dwukierunkowa

Algorytmy i struktury danych

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Matematyka dyskretna - 7.Drzewa

dr inż. Paweł Myszkowski Wykład nr 11 ( )

Algorytmy i struktury danych Struktury danych - drzewa IS/IO, WIMiIP

Wyszukiwanie w BST Minimalny i maksymalny klucz. Wyszukiwanie w BST Minimalny klucz. Wyszukiwanie w BST - minimalny klucz Wersja rekurencyjna

. Podstawy Programowania 2. Drzewa bst - część druga. Arkadiusz Chrobot. 12 maja 2019

Algorytmy i Struktury Danych, 9. ćwiczenia

Wstęp do Programowania potok funkcyjny

Przykładowe B+ drzewo

Podstawy Informatyki Metody dostępu do danych

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Algorytmy i Struktury Danych. (c) Marcin Sydow. Słownik. Tablica mieszająca. Słowniki. Słownik uporządkowany. Drzewo BST.

Struktury danych: stos, kolejka, lista, drzewo

BAZY DANYCH. Microsoft Access. Adrian Horzyk OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW. Akademia Górniczo-Hutnicza

Ogólne wiadomości o grafach

Sortowanie. Bartman Jacek Algorytmy i struktury

AiSD zadanie drugie. Gliwiński Jarosław Marek Kruczyński Konrad Marek Grupa dziekańska I5. 10 kwietnia 2008

Bazy danych - BD. Indeksy. Wykład przygotował: Robert Wrembel. BD wykład 7 (1)

Analiza algorytmów zadania podstawowe

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Definicja pliku kratowego

STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA STRUKTURY DANYCH I ZŁOŻONOŚĆ OBLICZENIOWA. Część 3. Drzewa Przeszukiwanie drzew

Podstawy Informatyki. Wykład 6. Struktury danych

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

Wykład 8. Drzewo rozpinające (minimum spanning tree)

BAZY DANYCH. Microsoft Access. Adrian Horzyk OPTYMALIZACJA BAZY DANYCH I TWORZENIE INDEKSÓW. Akademia Górniczo-Hutnicza

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

TEORETYCZNE PODSTAWY INFORMATYKI

Wstęp do programowania

TEORETYCZNE PODSTAWY INFORMATYKI

PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

Dynamiczne struktury danych

Indeksy. Wprowadzenie. Indeksy jednopoziomowe indeks podstawowy indeks zgrupowany indeks wtórny. Indeksy wielopoziomowe

Programowanie obiektowe

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

. Podstawy Programowania 2. Drzewa bst - część pierwsza. Arkadiusz Chrobot. 22 maja 2016

Drzewo binarne BST. LABORKA Piotr Ciskowski

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Programowanie obiektowe

Ogólne wiadomości o drzewach

Algorytmy i struktury danych

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Algorytmy i Struktury Danych.

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Transkrypt:

Drzewa binarne Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0 i T 1 są drzewami binarnymi to T 0 T 1 jest drzewem binarnym Np. ( ) ( ( ))

Wielkość drzewa binarnego = 1 T 0 +T 1 = T 0 + T 1 + 1 Szerokość drzewa binarnego w( ) = 1 w( T 0 T 1 ) = w( T 0 ) + w( T 1 )

Wysokość drzewa binarnego h( ) = 0 h( T 0 T 1 ) = max( h( T 0 ), h( T 1 )) + 1

Własności h(t i ) < h(t) w(t i ) < w(t) T i < T h(t) w(t) T T = 2*w(T) 1 (udowodnić indukcyjnie)

Przechodzenie drzewa t, T L, T R - pre-order, przejście wzdłużne T L, t, T R - in-order, przejście poprzeczne (przejście grafu w głąb) T L, T R, t - post-order, przejście wsteczne

Drzewo przeszukiwań (search tree) Dla każdego węzła t, wszystkie klucze w lewym poddrzewie są mniejsze od klucza w t, a wszystkie klucze w prawym poddrzewie są większe od klucza w t. Przejście in-order po drzewie przeszukiwań daje nam posortowany ciąg kluczy.

Drzewo zrównoważone Jest to drzewo, w którym głębokość dowolnych dwóch liści różni się co najwyżej o jeden. Wyszukanie elementu w zrównoważonym binarnym drzewie przeszukiwań wymaga O(log 2 n) operacji (w drzewie o wysokości n możemy zmieścić 2 n -1 węzłów).

Reprezentacja drzewa W tablicy wybrany węzeł ma indeks i. Korzeń lewego poddrzewa ma indeks 2i+1, a prawego 2i+2: Powyższa metoda jest dobra dla drzew zrównoważonych (mocno wypełnionych ). Możemy też drzewa reprezentować za pomocą struktur zawierających wskaźniki do potomków. Źródło obrazka: wikipedia

Przeszukiwanie drzewa (bez wartownika) PROCEDURE locate(x: INTEGER; t: Node): Node; BEGIN WHILE (t # NIL) & (t.key # x) DO IF t.key < x THEN t := t.right ELSE t := t.left END END ; RETURN t END locate Źródło: N.Wirth

Przeszukiwanie drzewa (z wartownikiem) PROCEDURE locate(x: INTEGER; t: Ptr): Ptr; BEGIN s.key := x; (*sentinel*) WHILE t.key # x DO IF t.key < x THEN t := t.right ELSE t := t.left END END; RETURN t END locate Źródło: N.Wirth

Dodawanie elementu do drzewa (tree search with insertion) PROCEDURE search(x: INTEGER; VAR p: Node); BEGIN IF p = NIL THEN (*x not in tree; insert*) NEW(p); p.key := x; p.count := 1; p.left := NIL; p.right := NIL ELSIF x < p.key THEN search(x, p.left) ELSIF x > p.key THEN search(x, p.right) ELSE INC(p.count) END END search; Źródło: N.Wirth

Usuwanie elementu z drzewa PROCEDURE delete(x: INTEGER; VAR p: Node); VAR q: Node; PROCEDURE del (VAR r: Node); BEGIN IF r.right # NIL THEN del(r.right) ELSE q.key := r.key; q.count := r.count; q := r; r := r.left END END del; BEGIN (*delete*) IF p = NIL THEN (*word is not in tree*) ELSIF x < p.key THEN delete(x, p.left) ELSIF x > p.key THEN delete(x, p.right) ELSE (*delete p^*) q := p; IF q.right = NIL THEN p := q.left ELSIF q.left = NIL THEN p := q.right ELSE del(q.left) END END END delete Źródło: N.Wirth

Równoważenie drzewa Za pomocą pomocniczej tablicy. Przechodzimy drzewo w kolejności in-order uzyskujemy posortowaną tablicę. Z tablicy tworzymy nowe drzewo, środkowy element zostaje korzeniem. Z elementów na lewo od niego tworzymy rekurencyjnie lewe poddrzewo, z elementów na prawo prawe poddrzewo.

Algorytm DSW Day/Stout/Warren 1986 Złożoność czasowa O(n) Algorytm działa w miejscu (in situ) Źródło obrazka: wikipedia

Algorytm DSW Najpierw wykonujemy obroty w prawo dla korzenia, a później jego wszystkich potomków. Uzyskujemy w ten sposób listę. Następnie wykonujemy obroty w lewo dla co drugiego węzła znajdującego się w prawym poddrzewie. Ilość obrotów jest określona: W pierwszym przebiegu leaf_count = n+1-2 lg( n+ 1) W drugim przebiegu ( n- leaf_count) div 2 W kolejnych przebiegach dzielimy przez 2

Algorytm DSW begin leaf-count := size + 1-2 lg(size+1) ; compression (root, leaf-count); size := size - leaf-count; while size > 1 do begin compression (root, size div 2); size := size div 2; end; end; Źródło: Q.F.Stout, B.L.Warren Communications of the ACM, september 1986, vol.29 n.9

Algorytm DSW - przykład 5 10 20 15 30 25 40 23 28

Czy opłaca się równoważenie drzewa? Wyszukanie w najgorszym przypadku (lista) wymaga O(n) operacji. Jednak szanse na powstanie listy są małe (możliwe jest n! kolejności podania elementów). Dla dużych n średnia długość ścieżki wyszukiwania to a n =2*(ln n + g - 1) g stała Eulera = 0.577... W drzewie zrównoważonym: a n '= log n - 1 lim(a n /a n ') = 2*ln(n)/log(n) = 2*ln(2) = 1.386... Średnio zyskamy więc ok. 39%

Drzewa AVL Adelson-Velskii & Landis 1962 Drzewo jest zrównoważone wtedy i tylko wtedy, gdy dla każdego węzła różnica wysokości jego dwóch poddrzew wynosi co najwyżej jeden. Nie musimy równoważyć całego drzewa po każdej operacji dodania/usuwania (jak w DSW). Drzewo AVL jest co najwyżej o 45% wyższe od drzewa idealnie zrównoważonego. Drzewo AVL o najmniejszej dozwolonej ilości węzłów tworzy drzewo Fibonacciego.

Drzewa Fibonacciego Puste drzewo to drzewo Fibonacciego o wysokości 0. Pojedynczy węzeł to drzewo Fibonacciego o wysokości 1. Jeśli T h-1 i T h-2 są drzewami Fibonacciego o wysokościach odpowiednio h-1 i h-2 to T h =T h-1 T h-2 jest drzewem Fibonacciego. Ilość węzłów: N 0 =0 N 1 =1 N h =N h-1 + 1+ N h-2

Drzewa AVL Dla każdego węzła zapamiętujemy współczynnik wyważenia równy różnicy wysokości prawego i lewego poddrzewa. Może on wynosić 0, +1 lub -1. Wstawianie do drzewa AVL może odbywać się tak, jak gdyby było ono zwyczajnym drzewem poszukiwań binarnych, następnie zaś, odtwarzając kroki w kierunku korzenia, wykonywane są aktualizacje wyważeń węzłów.

Drzewa AVL Jeśli współczynnik został zmieniony na 2 lub -2, to drzewo straciło własność AVL. Aby ją przywrócić, potrzebna jest rotacja. Rotacja drzewa będzie zawsze zostawiać poddrzewo zrównoważone, nie ma potrzeby wykonywania dalszych aktualizacji. Z praktyki wynika, że drzewo AVL jest średnio o 25% wyższe niż idealnie zrównoważone, a operację równoważenia trzeba wykonać średnio co drugą operację wstawienia.

Źródło obrazka: wikipedia Drzewa AVL

Drzewa AVL Złożoność wyszukiwania+dodania O(log n) dla DSW była O(n). Aplet demonstrujący działanie drzew AVL: http://webpages.ull.es/users/jriera/docencia/av L/AVL%20tree%20applet.htm

Usuwanie z drzewa AVL Jeśli usuwany węzeł jest liściem, zostaje usunięty. Jeśli nie jest liściem, musi zostać zastąpiony największym elementem z jego lewego poddrzewa lub najmniejszym z jego prawego poddrzewa. Wyszukany największy lub najmniejszy element ma co najwyżej jedno dziecko. Po usunięciu węzła odtwarzana jest ścieżka do korzenia, zaś współczynniki wyważenia są aktualizowane.

Usuwanie z drzewa AVL Odtwarzanie może być zatrzymane, jeśli współczynnik wyważenia zostaje zmieniony na -1 lub 1, oznacza to bowiem, iż wysokość poddrzewa pozostaje niezmieniona. Zmiana współczynnika wyważenia na 0 oznacza zmniejszenie wysokości poddrzewa, aktualizowanie współczynników musi być kontynuowane. Jeśli współczynnik zostanie zmieniony na -2 lub 2, to wykonywana jest rotacja w celu przywrócenia struktury AVL.

Usuwanie z drzewa AVL W przeciwieństwie do operacji wstawiania, wystąpienie rotacji nie musi oznaczać, iż drzewo zostało wyważone. W pesymistycznym przypadku rotacje będą wykonywane aż do wierzchołka drzewa. Z praktyki wynika, że operację równoważenia trzeba wykonać średnio co piątą operację usuwania.