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:

Podobne dokumenty
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 binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

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

Drzewa czerwono-czarne.

Podstawy Informatyki. Metody dostępu do danych

ALGORYTMY I STRUKTURY DANYCH

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

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

Porządek symetryczny: right(x)

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

Algorytmy i struktury danych. wykład 5

Algorytmy i Struktury Danych

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

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

Sortowanie bąbelkowe

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

Drzewa poszukiwań binarnych

Listy, kolejki, stosy

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

Algorytmy i struktury danych

Wykład 3. Drzewa czerwono-czarne

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

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

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

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

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

Algorytmy i Struktury Danych

Drzewa poszukiwań binarnych

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

Struktury Danych i Złożoność Obliczeniowa

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

Algorytmy i Struktury Danych

Teoretyczne podstawy informatyki

Struktury danych: stos, kolejka, lista, drzewo

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

Algorytmy i Struktury Danych.

Drzewa wyszukiwań binarnych (BST)

Tadeusz Pankowski

Dynamiczne struktury danych

Lista liniowa dwukierunkowa

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

Algorytmy i Struktury Danych, 9. ćwiczenia

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

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

Podstawowe pojęcia dotyczące drzew Podstawowe pojęcia dotyczące grafów Przykłady drzew i grafów

Drzewa AVL definicje

Stos LIFO Last In First Out

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

Teoretyczne podstawy informatyki

Przykładowe B+ drzewo

ALGORYTMY I STRUKTURY DANYCH

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

ALGORYTMY I STRUKTURY DANYCH

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

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

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

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

Ogólne wiadomości o drzewach

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Drzewa podstawowe poj

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

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

Podstawy Informatyki Metody dostępu do danych

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

Programowanie obiektowe

Programowanie obiektowe

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

Drzewo binarne BST. LABORKA Piotr Ciskowski

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

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.

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

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

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)

Podstawy Informatyki. Wykład 6. Struktury danych

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Programowanie obiektowe i C++ dla matematyków

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

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

PODSTAWY INFORMATYKI wykład 6.

Matematyka dyskretna - 7.Drzewa

TEORETYCZNE PODSTAWY INFORMATYKI

Co to są drzewa decyzji

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

Luty 2001 Algorytmy (4) 2000/2001

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

Sortowanie. Bartman Jacek Algorytmy i struktury

TEORETYCZNE PODSTAWY INFORMATYKI

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Algorytmy i Struktury Danych.

Ogólne wiadomości o grafach

Wstęp do Programowania potok funkcyjny

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

Transkrypt:

Drzewa

Drzewa Drzewo (ang. tree) zbiór węzłów powiązanych wskaźnikami, spójny i bez cykli. Drzewo posiada wyróżniony węzeł początkowy nazywany korzeniem (ang. root). Drzewo ukorzenione jest strukturą hierarchiczną. Korzeń węzła znajduje się na poziomie 0; numer poziomu danego węzła w drzewie jest wyznaczony odległością krawędziową od korzenia. Liściem (ang. leaf) w drzewie jest węzeł bez żadnego następnika. Węzeł wewnętrzny posiada co najmniej jednego następnika. Każdy węzeł oprócz korzenia posiada jednego poprzednika.

Drzewa Wysokość drzewa długość najdłuższej ścieżki od korzenia do liścia (liczba węzłów) inaczej liczba poziomów na których zapisane jest drzewo. Głębokość węzła długość ścieżki od korzenia do tego węzła (liczba węzłów) inaczej numer poziomu, na którym znajduje się węzeł. Uwaga: poziomy w drzewie numerujemy od 0; korzeń znajduje się na poziomie 0.

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: info wartość pamiętana w węźle, parent wskaźnik na poprzednika, left-child wskaźnik na lewego syna (lista następników), sibling wskaźnik na prawego brata. Każdy węzeł w drzewie przechowuje jedną wartość.

Drzewo binarne Drzewo binarne (ang. binary tree) to drzewo ukorzenione, w którym każdy wierzchołek posiada dwóch rozróżnialnych synów lewego i prawego. Węzeł drzewa binarnego zawiera pole z kluczem oraz wskaźnik na lewe poddrzewo (zakorzenione w jego lewym synu) i wskaźnik na prawe poddrzewo (zakorzenione w jego prawym synu). W drzewie binarnym poruszamy się tylko od korzenia w kierunku jakiegoś liścia. Jeśli w węźle drzewa binarnego znajduje się wskaźnik na ojca, to w drzewie takim można się przemieszczać w obu kierunkach od korzenia w kierunku jakiegoś liścia oraz w drugą stronę w kierunku korzenia. O drzewie takim mówimy, że jest dwukierunkowe. Wysokość binarnego drzewa n-elementowego jest nie mniejsza niż log(n) i nie większa niż n.

Szczególne drzewa binarne Drzewo regularne to drzewo binarne, w którym każdy węzeł wewnętrzny na dwóch synów. Drzewo pełne to drzewo regularne, w którym wszystkie liście są na tym samym poziomie. Drzewo pełne o wysokości h ma 2 h -1 węzłów. Drzewo zupełne to drzewo pełne, z którego usunięto część liści z prawej strony. Drzewo zupełne o wysokości h ma od 2 h-1 do 2 h -1 węzłów. Drzewo z wartownikiem każdy wskaźnik pusty jest ustawiany na wartownika, a w wartowniku mamy wskaźnik do korzenia.

Drzewo BST Drzewo binarnych poszukiwań (ang. binary search tree), w skrócie BST, to drzewo binarne, w którym przechowujemy elementy z pewnego uniwersum z porządkiem liniowym i w drzewie tym jest zachowany porządek symetryczny. W drzewie binarnym jest zachowany porządek symetryczny, gdy elementy mniejsze od korzenia znajdują się w lewym poddrzewie, elementy większe od korzenia w prawym poddrzewie oraz w lewym i w prawym poddrzewie też jest zachowany porządek symetryczny.

Drzewo BST Wyszukiwanie w drzewie BST działa podobnie do poszukiwania binarnego serach (węzeł *w, x) -> boolean { if (w == null) return false; if (x < w.info) return search(w.left, x); else if (w.info < x) return search(w.right, x); else return true; }

Drzewo BST Element minimalny znajduje się najbardziej po lewej stronie w drzewie BST od korzenia poruszamy się ciągle w lewo. Element maksymalny znajduje się najbardziej po prawej stronie w drzewie BST od korzenia poruszamy się ciągle w prawo.

Drzewo BST Wstawienie nowego elementu do drzewa BST znajdujemy mu miejsce tak jak w wyszukiwaniu binarnym (aż dojdziemy do wskaźnika pustego) insert (węzeł *w, x) -> node* { if (w == null) return new node(x); if (x < w.info) w.left := insert(w.left, x); else if (w.info < x) w.right := insert(w.right, x); else w.info := x; return w; }

Drzewo BST Usunięcie elementu z drzewa BST znajdujemy miejsce tego elementu tak jak w wyszukiwaniu binarnym (jak dojdziemy do wskaźnika pustego to elementu nie ma w drzewie): gdy element jest w liściu, to odcinam liść; gdy element jest w węźle z jednym następnikiem, to usuwam ze ścieżki ten węzeł; gdy element jest w węźle z dwoma synami, to z prawego poddrzewa usuwamy minimum (albo z lewego poddrzewa usuwamy maksimum) i przenosimy je do tego węzła.

Przeglądanie drzew BST In-order najpierw jest przeglądane i przetwarzane lewe poddrzewo w porządku in-order, potem korzeń a na końcu prawe poddrzewo w porządku in-order. Przeglądanie drzewa BST w porządku in-order gwarantuje, że węzły tego drzewa zostaną przetworzone w kolejności od najmniejszej do największej wartości. Przeglądanie in-order można wykorzystać do sortowania danych.

Przeglądanie drzew BST Pre-order najpierw jest przeglądany i przetwarzany korzeń drzewa, potem lewe poddrzewo w porządku preorder a na końcu prawe poddrzewo w porządku preorder. Przeglądanie drzewa BST w porządku pre-order gwarantuje, że na początku będą przetworzone węzły z lewej ścieżki tego drzewa w kolejności od korzenia do węzła o najmniejszej wartości. Post-order najpierw jest przeglądane i przetwarzane lewe poddrzewo w porządku post-order, potem prawe poddrzewo w porządku post-order a na końcu korzeń drzewa. Przeglądanie drzewa BST w porządku post-order gwarantuje, że na końcu będą przetworzone węzły z prawej ścieżki tego drzewa w kolejności od węzła o największej wartości do korzenia.

Rotacje w drzewie BST Rotacja w lewo Rotacja w prawo W dowolnym wewnętrznym węźle drzewa BST można zrobić rotację (w lewo albo w prawo) i nie zostanie zniszczony porządek symetryczny w tym drzewie.

Drzewa AVL Drzewo AVL (nazwa pochodzi od nazwisk rosyjskich matematyków: Adelsona-Velskiego oraz Landisa, którzy wymyślili i opublikowali to drzewo w 1962 roku) to drzewo BST, w którym każdy węzeł ma dodatkowy atrybut: balans (2 bity); w każdym węźle drzewa AVL wysokość lewego i prawego poddrzewa każdego węzła różni się co najwyżej o jeden (w prostszej implementacji w węzłach takiego drzewa jest pamiętana wysokość poddrzewa zakorzenionego w danym węźle). Wysokość n-elementowego drzewa AVL wynosi O(log n).

Drzewa AVL Drzewo AVL jest drzewem zrównoważonym, którego wysokość jest rzędu Θ(log n), gdzie n to liczba węzłów w całym drzewie. Zrównoważenie drzewa osiąga się, przypisując każdemu węzłowi współczynnik wyważenia, który jest równy różnicy wysokości lewego i prawego poddrzewa. Może wynosić 0, +1 lub -1. Wstawiając lub usuwając elementy drzewa (tak, by zachować własności drzewa BST), modyfikuje się też współczynnik wyważenia, a gdy przyjmie on niedozwoloną wartość, wykonuje specjalną operację rotacji węzłów, która przywraca zrównoważenie.

Drzewa AVL Można udowodnić, że n-elementowe drzewo AVL ma wysokość 1.4405 log 2 (n+1), przez co elementarne operacje słownikowe będą wykonywać się w czasie O(log n).

Drzewa AVL Wstawianie do drzewa AVL może odbywać się tak, jak gdyby było ono zwyczajnym drzewem poszukiwań binarnych, następnie zaś są odtwarzane kroki w kierunku korzenia i wykonywane aktualizacje wyważeń węzłów. Zmiana wartości współczynnika wyważenia na 0 oznacza, iż wysokość poddrzewa nie została zmieniona. Operacja wstawiania jest wówczas zakończona. Zmiana współczynnika wyważenia na 1 lub -1 oznacza, iż poddrzewo, którego korzeniem jest rozważany wierzchołek, zachowało własność drzewa AVL, lecz jego wysokość uległa zwiększeniu. Informacja o tym przekazywana jest do ojca tego węzła. Jeśli współczynnik został zmieniony na 2 lub -2, to drzewo straciło własność AVL. Aby ją przywrócić, potrzebna jest rotacja. Maksymalnie będą potrzebne dwie rotacje, po których nie ma potrzeby wykonywania dalszych aktualizacji.

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, które zostaje teraz dzieckiem rodzica wyszukanego elementu. Po jego usunięciu odtwarzana jest ścieżka od rodzica wyszukanego elementu do korzenia, zaś współczynniki wyważenia są aktualizowane. 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. 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 korzenia drzewa.

Drzewa AVL Wyszukiwanie w drzewie AVL jest wykonywane tak samo jak w niezrównoważonym drzewie BST dzięki serii porównań wartości wyszukiwanej z wierzchołkami, poczynając od korzenia. Wynik porównania oraz istnienie poddrzew pozwala stwierdzić, czy element szukany jest wierzchołkiem, znajduje się w lewym bądź prawym poddrzewie, czy też nie należy do drzewa. Zachowanie struktury AVL pozwala jednak na redukcję pesymistycznego czasu wyszukiwania do O(lg n). Operacja wyszukiwania nie modyfikuje struktury drzewa, więc nigdy nie pociąga wyważania drzewa (rotacji węzłów).

Drzewo R-B (czerwono-czarne) Drzewo czerwono-czarne (ang. red-black tree) to opracowane przez Rudolfa Bayera w 1972 roku drzewo BST, w którym każdy węzeł ma dodatkowy atrybut: kolor (1 bit); wszystkie węzły w drzewie R-B są pokolorowane na czarno albo na czerwono według następujących zasad: każdy węzeł jest czerwony lub czarny; korzeń zawsze jest czarny; każdy liść jest czarny (traktujemy wszystkie wskaźniki puste null jako liście); jeśli węzeł jest czerwony, to jego synowie muszą być czarni ; każda ścieżka z korzenia do liścia zawiera tyle samo czarnych węzłów.

Drzewo R-B (czerwono-czarne) Warunki narzucone na drzewa czerwono-czarne gwarantują, że najdłuższa ścieżka od korzenia do liścia będzie co najwyżej dwukrotnie dłuższa, niż najkrótsza wynika to wprost z ostaniej własności. Można udowodnić, że n-elementowe drzewo czerwono-czarne ma wysokość 2 log 2 (n+1), przez co elementarne operacje słownikowe będą wykonywać się w czasie O(log n).