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

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:

Porządek symetryczny: right(x)

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

Listy, kolejki, stosy

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

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

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

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

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

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

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

Struktury danych: stos, kolejka, lista, drzewo

Drzewa wyszukiwań binarnych (BST)

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

Algorytmy i Struktury Danych

Dynamiczne struktury danych

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

Stos LIFO Last In First Out

Drzewa poszukiwań binarnych

Algorytmy i Struktury Danych

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

ALGORYTMY I STRUKTURY DANYCH

Teoretyczne podstawy informatyki

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

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

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

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

Drzewa poszukiwań binarnych

Drzewa czerwono-czarne.

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

Algorytmy i Struktury Danych.

Lista liniowa dwukierunkowa

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

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

Algorytmy i Struktury Danych, 9. ćwiczenia

Algorytmy i struktury danych. wykład 5

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

Wykład 3. Drzewa czerwono-czarne

Podstawy Informatyki. Metody dostępu do danych

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

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

Struktury Danych i Złożoność Obliczeniowa

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

Teoretyczne podstawy informatyki

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

Sortowanie bąbelkowe

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

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

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

Algorytmy i struktury danych

Tadeusz Pankowski

Drzewa podstawowe poj

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

Podstawy Informatyki. Wykład 6. Struktury danych

Programowanie obiektowe

Ogólne wiadomości o grafach

Programowanie obiektowe

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

Przykładowe B+ drzewo

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

Drzewo binarne BST. LABORKA Piotr Ciskowski

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

Algorytmy i struktury danych

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

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

Ogólne wiadomości o drzewach

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

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

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

ALGORYTMY I STRUKTURY DANYCH

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

Matematyka dyskretna - 7.Drzewa

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

PODSTAWY INFORMATYKI wykład 6.

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

TEORETYCZNE PODSTAWY INFORMATYKI

Wstęp do programowania

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Programowanie obiektowe i C++ dla matematyków

TEORETYCZNE PODSTAWY INFORMATYKI

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

Programowanie obiektowe i C++ dla matematyków

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

Egzaminy i inne zadania. Semestr II.

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

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

Programowanie komputerów. Jacek Lach Zakład Oprogramowania Instytut Informatyki Politechnika Śląska

Wykład 8 - Drzewa i algorytmy ich przetwarzania

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

Wykłady z Matematyki Dyskretnej

Co to są drzewa decyzji

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

Abstrakcyjne struktury danych - stos, lista, drzewo

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

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

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.

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

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; głębokość korzenie wynosi 0.

Drzewo Drzewo uporządkowane ma ponumerowanych (oznaczonych) następników. Drzewo uporządkowane w reprezentacji na-lewo-synna-prawo-brat składa się z węzłów, które zawierają następujące pola: value 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 co najwyżej 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 liści. 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.value) return search(w.left, x); else if (w.value < 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.value) w.left := insert(w.left, x); else if (w.value < x) w.right := insert(w.right, x); else w.value := 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.

Drzewo BST Usunięcie elementu z drzewa BST: remove (węzeł *w, x) -> node* { if (w == null) return null; if (x < w.value) w.left := remove(w.left, x); else if (w.value < x) w.right := remove(w.right, x); else if (w jest liściem) { delete w; return null; } else if (w me tylko lewego syna) { s := w.left; delete w; return s; } else if (w me tylko prawego syna) { s := w.right; delete w; return s; } else { w.value := max(w.left); remove-max(w.left); } return w; }

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.

Drzewo BST Przetwarzanie drzewa binarnego w porządku inorder): inorder (węzeł *w) -> void { if (w == null) return; inorder(w.left); przetworzenie w.value; inodrer(w.right); }