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



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

Porządek symetryczny: right(x)

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

Wykład 3. Drzewa czerwono-czarne

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

Drzewa wyszukiwań binarnych (BST)

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

Drzewa poszukiwań binarnych

Listy, kolejki, stosy

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

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

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

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:

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

Drzewa poszukiwań binarnych

Algorytmy i Struktury Danych

Drzewa czerwono-czarne.

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych

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

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

Algorytmy i Struktury Danych

ALGORYTMY I STRUKTURY DANYCH

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

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

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

ALGORYTMY I STRUKTURY DANYCH

Podstawy Informatyki. Metody dostępu do danych

Teoretyczne podstawy informatyki

Algorytmy i struktury danych. wykład 5

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

Struktury danych: stos, kolejka, lista, drzewo

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, 9. ćwiczenia

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

Sortowanie bąbelkowe

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

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

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

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

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

Lista liniowa dwukierunkowa

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

Algorytmy i Struktury Danych.

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

Drzewa podstawowe poj

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

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

Struktury Danych i Złożoność Obliczeniowa

Teoretyczne podstawy informatyki

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

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 >

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)

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Podstawy programowania wykład

Wstęp do programowania

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

Tadeusz Pankowski

Programowanie obiektowe i C++ dla matematyków

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

Twój wynik: 4 punktów na 6 możliwych do uzyskania (66,67 %).

PODSTAWY INFORMATYKI wykład 6.

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

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

Dynamiczne struktury danych

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

Programowanie w VB Proste algorytmy sortowania

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

Ogólne wiadomości o grafach

Matematyka dyskretna - 7.Drzewa

Algorytmy i Struktury Danych.

Podstawy Informatyki. Wykład 6. Struktury danych

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

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

Wstęp do programowania

Poprawność semantyczna

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

Abstrakcyjne struktury danych w praktyce

Programowanie obiektowe

Struktury danych. przez użytkownika, jak to ma miejsce w przypadku zwykłych zmiennych statycznych.

Przykładowe B+ drzewo

Ogólne wiadomości o drzewach

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

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

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

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Wykład 8 - Drzewa i algorytmy ich przetwarzania

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI

Wykład 4. Tablice z haszowaniem

Algorytmy i struktury danych

Stos LIFO Last In First Out

Podstawy Informatyki Metody dostępu do danych

Transkrypt:

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

O czym będziemy mówić Definicja Operacje na drzewach BST: Search Minimum, Maximum Predecessor, Successor Insert, Delete Struktura losowo budowanych drzew BST 2

Wprowadzenie Poszukujemy dynamicznego ADT, który efektywnie będzie obsługiwał następujące operacje: Wyszukiwanie elementu (Search) Znajdowanie Minimum/Maximum Znajdowanie poprzednika/następnika (Predecessor/Successor) Wstawianie/usuwanie elementu (Insert/Delete) Wykorzystamy drzewo binarne! Wszystkie operacje powinny zajmować czas Θ(lg n) Drzewo powinno być zawsze zbalansowane inaczej czas będzie proporcjonalny do wysokości drzewa (gorszy od O(lg n))! 3

Drzewo poszukiwań binarnych (binary search tree) Struktura drzewa z korzeniem Każdy węzeł x posiada pola left(x), right(x), parent(x), oraz key(x). Własność drzewa BST: Niech x będzie dowolnym węzłem drzewa, natomiast niech y będzie należał do poddrzewa o korzeniu w x wtedy:. Jeżeli należy do lewego poddrzewa to: key(y) key(x) Jeżeli należy do prawego poddrzewa to : key(y) > key(x) 4

Przykład BST 5 2 3 7 3 2 5 8 7 5 8 5 Metody przechodzenia przez drzewo : In-order, pre-order, post-order 5

Poszukiwanie w drzewie BST Tree-Search(x,k) if x = null or k = key[x] then return x if k < key[x] then return Tree-Search(left[x],k) else return Tree-Search(right[x],k) rekurencyjnie Tree-Search(x,k) while x null and k key[x] do if k < key[x] then x left[x] else x right[x] return x iteracyjnie złożoność: O(h) 6

Przykład Poszukiwany klucz: 13 7

Przechodzenie przez wszystkie węzły drzewa Inorder-Tree-Walk(x) if x null then Inorder-Tree-Walk(left[x]) print key[x] Inorder-Tree-Walk(right[x]) czas wykonania: T(0) = Θ(1) T(n)=T(k) + T(n k 1) + Θ(1) złożoność: Θ(n) 8

Odnajdowanie minimum i maksimum Tree-Minimum(x) while left[x] null do x left[x] return x Tree-Maximum(x) while right[x] null do x right[x] return x złożoność: O(h) 9

Przykład minimum 10

Odnajdowanie następnika Następnikiem x nazywamy najmniejszy element y wśród elementów większych od x Następnik może zostać odnaleziony bez porównywania kluczy. Jest to : 1. null jeśli x jest największym z węzłów. 2. minimum w prawym poddrzewie t jeśli ono istnieje. 3. najmniejszy z przodków x, dla których lewy potomek jest przodkiem x. 11

Odnajdowanie następnika x z y minimum w prawym poddrzewie t x najmniejszy z przodków x, dla których lewy potomek jest przodkiem x 12

Odnajdowanie następnika Tree-Successor(x) if right[x] null // przypadek 2 then return Tree-Minimum(right[x]) y parent[x] while y null and x = right[y] // przypadek 3 do x y y parent[y] return y 13

Przykład Poszukajmy następników dla 15 (przyp. 2), 13 (przyp. 3) 14

Wstawianie elementów Wstawianie jest bardzo zbliżone do odnajdowania elementu: Odnajdujemy właściwe miejsce w drzewie, w które chcemy wstawić nowy węzeł z. Dodawany węzeł z zawsze staje się liściem. Zakładamy, że początkowo left(z) oraz right(z) mają wartość null. 15

Wstawanie przykład Wstawiamy 13 do drzewa 12 5 18 2 9 15 19 z 13 17 16

Wstawianie pseudokod Tree-Insert(T,z) y null x root[t] while x null do y x if key[z] < key[x] then x left[x] else x right[x] parent[z] y // dla pustego drzewa if y = null then root[t] z else if key[z] < key[y] then left[y] z else right[y] z 17

Usuwanie z drzewa BST Usuwanie elementu jest bardziej skomplikowane niż wstawianie. Można rozważać trzy przypadki usuwania węzła z: 1. z nie ma potomków 2. z ma jednego potomka 3. z ma 2 potomków przypadek 1: usuwamy z i zmieniamy u rodzica wskazanie na null. przypadek 2: usuwamy z a jego dziecko staje się dzieckiem rodzica. przypadek 3:najbardziej złożony; nie można po prostu usunąć węzła i przenieść dzieci do rodzica drzewo przestałoby być binarne! 18

Usuwanie z drzewa BST - przypadek 1 usuwamy delete 19

Usuwanie z drzewa BST przypadek 2 Usuwany węzeł 20

Usuwanie z drzewa BST przypadek 3 Rozwiązanie polega na zastąpieniu węzła jego następnikiem. założenie: jeśli węzeł ma dwóch potomków, jego następnik ma co najwyżej jednego potomka. dowód: jeśli węzeł ma 2 potomków to jego następnikiem jest minimum z prawego poddrzewa. Minimum nie może posiadać lewego potomka (inaczej nie byłoby to minimum) 21

Usuwanie z drzewa BST przypadek 3 Usuwamy z z δ y δ α β α β y w w 22

Usuwanie z drzewa BST przypadek 3 usuwamy następnik 23

Usuwanie z drzewa BST pseudokod Tree-Delete(T,z) if left[z] = null or right[z] = null /* p. 1 lub 2 then y z else y Tree-Successor(z) if left[y] null then x left[y] else x right[y] if x null then parent[x] parent[y] if parent[y] = null then root[t] x else if y = left[parent[y]] then left[parent[y]] x else right[parent[y]] x if y z then key[z] key[y] return y 24

Analiza złożoności Usuwanie: dwa pierwsze przypadki wymagają O(1) operacji: tylko zamiana wskaźników. Przypadek 3 wymaga wywołania Tree-Successor, i dlatego wymaga czasu O(h). Stad wszystkie dynamiczne operacje na drzewie BST zajmują czas O(h), gdzie h jest wysokością drzewa. W najgorszym przypadku wysokość ta wynosi O(n) 25