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

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

Wykład 3. Drzewa czerwono-czarne

Porządek symetryczny: right(x)

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

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

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

Drzewa wyszukiwań binarnych (BST)

Drzewa poszukiwań binarnych

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:

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

Listy, kolejki, stosy

Drzewa czerwono-czarne.

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

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

Drzewa poszukiwań binarnych

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 BST i AVL. Drzewa poszukiwań binarnych (BST)

. 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

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych, 9. ćwiczenia

Podstawy Informatyki. Metody dostępu do danych

Algorytmy i Struktury Danych.

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

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. (c) Marcin Sydow. Słownik. Tablica mieszająca. Słowniki. Słownik uporządkowany. Drzewo BST.

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

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

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

Sortowanie bąbelkowe

Algorytmy i struktury danych. wykład 5

Teoretyczne podstawy informatyki

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

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

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

ALGORYTMY I STRUKTURY DANYCH

Struktury Danych i Złożoność Obliczeniowa

Lista liniowa dwukierunkowa

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Struktury danych: stos, kolejka, lista, drzewo

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

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

Algorytmy i struktury danych

Algorytmy i Struktury Danych.

Drzewa podstawowe poj

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

Teoretyczne podstawy informatyki

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

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

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

< 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.

Drzewo binarne BST. LABORKA Piotr Ciskowski

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

Tadeusz Pankowski

Programowanie obiektowe i C++ dla matematyków

Algorytmy i struktury danych

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

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

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

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

Podstawy programowania wykład

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

Stos LIFO Last In First Out

Wstęp do programowania

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

Wstęp do programowania

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Matematyka dyskretna - 7.Drzewa

PODSTAWY INFORMATYKI wykład 6.

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

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

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

Abstrakcyjne struktury danych w praktyce

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

struktury danych dla operacji słownikowych

Programowanie obiektowe

Ogólne wiadomości o drzewach

Dynamiczne struktury danych

- 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

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

TEORETYCZNE PODSTAWY INFORMATYKI

Ogólne wiadomości o grafach

Podstawy Informatyki. Wykład 6. Struktury danych

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

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

Algorytmy i Struktury Danych.

Poprawność semantyczna

TEORETYCZNE PODSTAWY INFORMATYKI

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

Podstawy Informatyki Metody dostępu do danych

Wykład 8 - Drzewa i algorytmy ich przetwarzania

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

Programowanie obiektowe i C++ dla matematyków

Programowanie w VB Proste algorytmy sortowania

ALGORYTMY I STRUKTURY DANYCH

Transkrypt:

Wykład 2 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]) 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 if left[y] null y Tree-Successor(z) 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

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. 26

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

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 28

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

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

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

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