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

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

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

Wykład 3. Drzewa czerwono-czarne

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

Porządek symetryczny: right(x)

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:

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

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

Drzewa czerwono-czarne.

ALGORYTMY I STRUKTURY DANYCH

Podstawy Informatyki. Metody dostępu do danych

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

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

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

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych

Listy, kolejki, stosy

Algorytmy i Struktury Danych

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Drzewa poszukiwań binarnych

Sortowanie bąbelkowe

Drzewa poszukiwań binarnych

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

Algorytmy i Struktury Danych.

Drzewo binarne BST. LABORKA Piotr Ciskowski

Algorytmy i struktury danych. wykład 5

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

Lista liniowa dwukierunkowa

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

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

ALGORYTMY I STRUKTURY DANYCH

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

Algorytmy i Struktury Danych, 9. ćwiczenia

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

Drzewa AVL definicje

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

Teoretyczne podstawy informatyki

Tadeusz Pankowski

Drzewa wyszukiwań binarnych (BST)

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

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

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

Struktury danych: stos, kolejka, lista, drzewo

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

Drzewa podstawowe poj

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

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

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

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)

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

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

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

Programowanie obiektowe

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

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Ogólne wiadomości o drzewach

Matematyka dyskretna - 7.Drzewa

PODSTAWY INFORMATYKI wykład 6.

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

ALGORYTMY I STRUKTURY DANYCH

Definicja pliku kratowego

Teoretyczne podstawy informatyki

Podstawy Informatyki Metody dostępu do danych

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

Programowanie obiektowe

Przykładowe B+ drzewo

Sortowanie. Bartman Jacek Algorytmy i struktury

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

7a. Teoria drzew - kodowanie i dekodowanie

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

Podstawy Informatyki. Wykład 6. Struktury danych

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

Dynamiczne drzewa. Piotr Sankowski. - p. 1/27

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

Bazy danych. Andrzej Łachwa, UJ, /15

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

Algorytmy i struktury danych. Wykład 6 Tablice rozproszone cz. 2

Egzaminy i inne zadania. Semestr II.

Wykłady z Matematyki Dyskretnej

Wstęp do programowania

KOPCE KOLEJKI PRIORYTETOWE - PRZYPOMNIENIE KOPCE WYSOKOŚĆ KOPCA KOPCE I KOLEJKI PRIORYTETOWE PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI

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

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Algorytmy i struktury danych

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

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

Metoda Tablic Semantycznych

Dynamiczne drzewa. Marian M. Kędzierski. 26 listopada Wstęp Euler-Tour Trees Dynamiczna spójność Algorytm Dinica Link-Cut Trees

- wyszukiwanie wzorca w tekście są algorytmy siłowe czyli przyporządkowanie znaczek po znaczku, ale są też fajniejsze i tu dużo dziwnych nazw

Algorytmy i struktury danych. Wykład 4 Tablice nieporządkowane i uporządkowane

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych

Transkrypt:

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

Drzewa AVL Ø Drzewa AVL Definicja drzewa AVL Operacje wstawiania i usuwania Złożoność obliczeniowa Ø Drzewa 2-3-4 Definicja drzewa 2-3-4 Operacje wstawiania i usuwania Złożoność obliczeniowa Literatura R. Sedgewick, Algorytmy w C++, rozdz. 13 2

Drzewa AVL Definicja: drzewem AVL nazywamy drzewo BST, takie że dla każdego z węzłów różnica wysokości jego lewego i prawego poddrzewa wynosi co najwyżej 1. Skrót AVL pochodzi od nazwisk twórców: Adelson-Velskii oraz Landis x h h-1 S h-1 S h-2 h-2 S h S h = S h 1 + S h 2 3

Przykład drzewa AVL 2 4 44 17 78 1 2 32 50 1 1 48 62 3 88 1 4

Wysokość drzewa AVL Twierdzenie:wysokość drzewa AVL przechowującego n węzłów wynosi O(log n). n(2) 3 4 n(1) Dowód: ograniczymy najpierw n(h): minimalną ilość wewnętrznych węzłów w drzewie AVL o wysokości h. widać, że n(1) = 1 i n(2) = 2 dla n > 2, drzewo o wysokości h zawiera korzeń oraz dwa poddrzewa o wysokościach h-1 i h-2. stąd: n(h) = 1 + n(h-1) + n(h-2) wiemy, że n(h-1) > n(h-2), więc n(h) > 2n(h-2). Dalej n(h) > 2n(h-2), n(h) > 4n(h-4), n(h) > 8n(n-6),,n(h) > 2 i n(h-2i) rozwiązując powyższe dostaniemy n(h) > 2 h/2-1, czyli h < 2log n(h) +2 Ø Stąd wysokość drzewa AVL wynosi O(log n) 5

Wstawianie Ø Wstawiamy tak jak do drzewa BST Ø Zawsze dodajemy nowy liść. Ø Przykład : 44 44 17 78 17 78 a=y c=z 32 50 88 32 50 88 48 62 48 62 b=x w 54 przed Po wstawieniu 54 6

Rotacje Rotacja w prawo y x x δ Rotacja w lewo α y α β β δ α x β i x y δ α x y i β y δ 7

Left-Rotate Left-Rotate(T,x) y ß right[x] right[x] ß left[y] parent[left[y]] ß x parent[y] ß parent[x] if parent[x] = null then root[t] ß y else if x = left[parent[x]] then left[parent[x]] ß y left[y] ß x else right[parent[x]] ß y parent[x] ß y Inicjuj y Zamień lewe poddrzewo y na prawe poddrzewo x Przyłącz ojca x jako ojca y Przyłącz x jako lewego syna y 8

Przykład: Left-Rotate (1) 7 4 11 x 3 6 9 18 y 2 14 19 12 17 22 20 9

Przykład: Left-Rotate (2) 7 4 11 x 2 3 6 α 9 14 18 19 y 12 17 β 20 22 δ 10

Przykład: Left-Rotate (3) 7 4 18 y 3 6 11 x 19 2 9 α 14 12 17 β 20 22 δ 11

Przykład: Left-Rotate (4) 7 4 18 y 3 6 11 x 19 2 9 14 22 12 17 20 12

Rotacje Ø Zachowują własność drzewa BST. Ø Zajmują stały czas O(1) stała ilość operacji na wskaźnikach. Ø Rotacje w lewo i w prawo są symetryczne. 13

Przebudowa drzewa Ø niech (a,b,c) będzie pożądaną listą wierzchołków w porządku inorder Ø Przeprowadzamy rotacje, niezbędne do przemieszczenia b na górę poddrzewa a=z b=y (pozostałe dwa przypadki są symetryczne) a=z c=y przypadek 2: podwójna rotacja (prawa c, a potem lewa a) T 0 c=x T 0 b=x T 1 b=y T 3 b=x T 2 T 3 a=z c=x T 1 T 2 a=z c=y przypadek 1: pojedyncza rotacja (lewa rotacja a) T 0 T 1 T 2 T 3 T 0 T 1 T 2 T 3 14

Przykład wstawiania niezbalansowane... 5 44 z 2 64 17 78 2 1 3 y 32 1 50 4 2 1 x 48 3 62 1 54 5 T T 0 2 T 1 2 17...zbalansowane 7 1 88 T 3 4 44 3 2 y 1 2 2 32 1 50 3 78 1 1 5 48 54 4 Nie można wyświetlić obrazu. Na komputerze może brakować pamięci do otwarcia obrazu lub obraz może być uszkodzony. Uruchom ponownie komputer, a następnie otwórz plik ponownie. Jeśli czerwony znak x nadal będzie wyświetlany, konieczne może być usunięcie obrazu, a następnie ponowne wstawienie go. 62 x T 2 z 6 7 88 1 T 0 T 1 T 3 15

Przebudowa drzewa (pojedyncza rotacja) T 0 a = z T 1 b = y Nie moż na wyś wietl ić obra zu. Na kom pute rze moż e brak ować T 2 c = x 1 rotacja T 3 a = z b = y Nie moż na wyś wietl ić obra zu. Na kom pute rze moż e brak ować T 0 T 1 T 2 c = x T 3 T 0 a = x T 1 Nie mo żna wyś wiet lić obr azu. Na ko mp uter b = y T 2 c = z T 3 1 rotacja T 3 a = x T 2 Nie mo żna wyś wiet lić obr azu. Na ko mp uter b = y T 1 c = z T 0 16

Przebudowa drzewa (podwójna rotacja) T 0 a = z Nie możn a wyświ etlić obraz u. Na komp uterz e może brako wać pamię ci do otwar b = x T 2 c = y 2 rotacje T 3 T 0 a = z Nie możn a wyświ etlić obraz u. Na komp uterz e może brako wać pamię ci do otwar T 1 b = x T 2 c = y T 3 T 1 a = y b = x Nie mo żna wyś wiet lić obr azu. Na ko mp uter c = z 2 rotacje b = x a = y T 0 T 3 T 2 T 3 T 1 T 0 T 1 T 2 Nie mo żna wyś wiet lić obr azu. Na ko mp uter c = z 17

Usuwanie z drzewa AVL Ø Usuwamy, jak z drzewa BST może spowodować to zaburzenie zbalansowania drzewa. Ø Przykład: 44 44 17 62 17 62 32 50 78 50 78 48 54 88 48 54 88 Przed usunięciem 32 Po usunięciu 18

Przywracanie zbalansowania po usunięciu Ø Niech z będzie pierwszym niezbalansowanym węzłem, na który natrafiamy idąc od w. Niech y będzie dzieckiem z o większej wysokości, a x jego dzieckiem o większej wysokości. Ø Przeprowadzamy przebudowę drzewa w x, tak aby przywrócić zbalansowanie w z. Ø Ponieważ operacja taka może zachwiać balans w węźle powyżej - musimy sprawdzać zbalansowanie drzewa powyżej (aż do korzenia) a=z 44 62 w 17 62 b=y 44 78 50 78 c=x 17 50 88 48 54 88 48 54 19

Złożoność obliczeniowa operacji na drzewach AVL Ø Pojedyncza przebudowa zabiera czas O(1) Jeśli korzystamy ze struktury łączonego drzewa binarnego Ø Wyszukiwanie zajmuje O(log n) Wysokość drzewa wynosi O(log n), nie potrzeba przebudowywać drzewa Ø Wstawianie zajmuje O(log n) Odnalezienie miejsca O(log n) ze względu na wysokość drzewa Przebudowa drzewa O(1) Ø Usuwanie - O(log n) Odnalezienie zabiera czas O(log n) Naprawa drzewa O(log n) ze względuu na wysokość drzewa 20

Drzewa 2-3-4 9 2 5 7 10 14 21

Drzewa poszukiwań o wielu drogach Ø Drzewem poszukiwań o wielu drogach (B-drzewem) nazywamy uporządkowane drzewo o następujących cechach: Każdy węzeł wewnętrzny posiada co najmniej 2 potomków i przechowuje d -1 elementów-kluczy (k i, o i ), gdzie d jest ilością potomków węzła Dla każdego węzła o potomkach v 1 v 2 v d przechowującego klucze k 1 k 2 k d-1 Klucze w poddrzewie v 1 są mniejsze od k 1 Klucze w poddrzewie v i są pomiędzy k i-1 i k i (i = 2,, d - 1) Klucze w poddrzewie v d są większe od k d-1 Liście nie przechowują kluczy 11 24 2 6 8 15 27 32 30 22

Przechodzenie InOrder w drzewach o wielu drogach Ø Możliwe jest rozszerzenie notacji odwiedzania węzłów InOrder z drzew binarnych na drzewa o wielu drogach Ø Odwiedzamy element (k i, o i ) w węźle v pomiędzy rekursywnymi odwiedzinami poddrzew v o korzeniu w v i i v i + 1 Ø Odwiedzane węzły w tak zdefiniowanym porządku InOrder są uporządkowane rosnąco 11 24 8 12 2 6 8 15 27 32 2 4 6 10 14 18 30 1 3 5 7 9 11 13 16 19 15 17 23

Poszukiwanie w drzewach o wielu drogach Ø Podobnie do poszukiwania w drzewie BST Ø Dla każdego węzła wewnętrznego o potomkach v 1 v 2 v d o kluczach k 1 k 2 k d-1 : k = k i (i = 1,, d - 1):poszukiwanie zakończone sukcesem k < k 1 : poszukiwanie kontynuujemy w poddrzewie v 1 k i-1 < k < k i (i = 2,, d - 1): poszukiwanie kontynuujemy w poddrzewie v i k > k d-1 : poszukiwania kontynuujemy w poddrzewie v d Ø Dotarcie do liścia kończy poszukiwania (porażka) Ø Przykład : odszukujemy klucza 30 11 24 2 6 8 15 27 32 30 24

Drzewa 2-3-4 Ø Drzewa 2-3-4 nazywane też (2,4) są drzewami poszukiwań o wielu drogach o następujących własnościach własność ilości potomków: każdy węzeł wewnętrzny ma co najwyżej 4 potomków własność wysokości: wszystkie liście mają tę samą wysokość Ø W zależności od ilości potomków, wewnętrzne węzły będziemy nazywać 2-węzłami, 3-węzłami i 4-węzłami 10 15 24 2 8 12 18 27 32 25

Wysokość w drzewach 2-3-4 Ø Twierdzenie: Drzewo 2-3-4 przechowujące n elementów ma wysokość O(log n) dowód: niech h będzie wysokością drzewa 2-3-4 o n elementach ponieważ mamy co najmniej 2 i elementów na poziomie i = 0,, h - 1 i nie ma elementów ma poziomie h, więc stąd, h log (n + 1) n 1 + 2 + 4 + + 2 h-1 = 2 h - 1 Ø Wyszukiwanie w drzewie 2-3-4 o n elementach zajmuje czas O(log n) poziom 0 1 h-1 h elementy 1 2 2 h-1 0 26

Wstawianie Ø Nowy element (k, o) wstawiamy do węzła v ostatniego wewnętrznego węzła, przez który przechodziliśmy poszukując k Nie psujemy własności wysokości drzewa Możemy spowodować przepełnienie węzła (v może stać się 5-węzłem) Ø Przykład: wstawianie 30 powoduje przepełnienie 10 15 24 2 8 12 18 v 27 32 35 10 15 24 2 8 12 18 27 30 32 35 v 27

Przepełnienie i rozdzielanie węzła Ø Problem przepełnienia można rozwiązać przez podział węzła v: niech v 1 v 5 będą potomkami v i k 1 k 4 będą kluczami w v węzeł v zastępujemy 2 węzłami v' i v" v' jest 3-węzłem o kluczach k 1 k 2 i potomkach v 1 v 2 v 3 v" jest 2-węzłem o kluczach k 4 i potomkach v 4 v 5 klucz k 3 jest wstawiany do rodzica u węzła v (to może tworzyć nowy korzeń) Ø Przepełnienie może teraz nastąpić w węźle u u 15 24 u 15 24 32 12 18 27 30 32 35 v 12 18 27 30 v' 35 v" v 1 v 2 v 3 v 4 v 5 v 1 v 2 v 3 v 4 v 5 28

Analiza wstawiania Algorytm insertitem(k, o) 1. Odszukujemy klucz k w celu zlokalizowania węzła do wstawienia wartości v 2. Dodajemy nowy element (k, o) w węźle v 3. while overflow(v) if isroot(v) twórz nowy pusty korzeń nad v v split(v) Ø Niech T będzie drzewem 2-3-4 o n elementach T ma wysokość O(log n) krok 1 zajmuje czas O(log n), ponieważ odwiedzamy O(log n) węzłów krok 2 zajmuje czas O(1) krok 3 zabiera O(log n) czasu, ponieważ każde rozdzielanie zabiera O(1) i możemy mieć O(log n) takich operacji Ø Stąd wstawianie do drzewa 2-3-4 zajmuje czas O(log n) 29

Usuwanie Ø Rozważania na temat usuwania można sprowadzić tylko do przypadku usuwania wartości z węzła nie posiadającego potomków Ø W przeciwnym razie zastępujemy element kolejnym w porządku inorder Ø Przykład: usuwanie 24 zastępujemy 24 prze następnik w porządku inorder - 27 10 15 24 2 8 12 18 27 32 35 10 15 27 2 8 12 18 32 35 30

Niedobór i łączenie Ø Usunięcie elementu z węzła v może spowodować niedobór - v może stać się 1-węzłem (0 klucz, 1 potomek) Ø Dla obsługi tej sytuacji należy połączyć v z rodzicem u, rozpatrzmy dwa przypadki Ø przypadek 1: sąsiedni brat v jest 2-węzłem operacja łączenia: łączymy v z bratem w i przenosimy element z u do połączonego węzła v' po połączeniu, niedobór może nastąpić w węźle powyżej (u) u 9 14 u 9 2 5 7 10 w v 2 5 7 10 14 v' 31

Niedobór i łączenie Ø przypadek 2: sąsiedni brat w węzła v jest 3-węzłem lub 4-węzłem przenosimy: 1. potomka w do v 2. element z u do v 3. element z w do u po przeniesieniu nie występują przepełnienia u 4 9 u 4 8 2 6 8 w v w 2 6 9 v 32

Analiza usuwania Ø Niech T będzie drzewem 2-3-4 o n elementach wysokość T wynosi O(log n) Ø Operacja usuwania: odwiedzamy O(log n) węzłów aby odszukać węzeł, z którego usuwamy element obsługa niedoborów może prowadzić do wykonania serii O(log n) łączeń węzłów (przyp. 1) oraz jednego przesuwania (przyp. 2) każde łączenie zajmuje O(1) Ø Stąd operacja usuwania w drzewie 2-3-4 zajmuje czas O(log n) 33