Drzewa poszukiwań binarnych

Podobne dokumenty
Porządek symetryczny: right(x)

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

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:

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

Listy, kolejki, stosy

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

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

Drzewa wyszukiwań binarnych (BST)

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.

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

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

Wykład 3. Drzewa czerwono-czarne

Sortowanie - wybrane algorytmy

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

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

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

Struktury Danych i Złożoność Obliczeniowa

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

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

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

Drzewa czerwono-czarne.

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

Algorytmy i struktury danych. wykład 5

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

Algorytmy zachłanne. dr inż. Urszula Gałązka

ALGORYTMY I STRUKTURY DANYCH

Podstawy Informatyki. Metody dostępu do danych

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

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

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

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Algorytmy i Struktury Danych

KARTA KURSU. Algorytmy, struktury danych i techniki programowania. Algorithms, Data Structures and Programming Techniques

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

Teoretyczne podstawy informatyki

Algorytmy i Struktury Danych.

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

Struktury danych: stos, kolejka, lista, drzewo

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

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

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

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

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

Definicja pliku kratowego

Sortowanie bąbelkowe

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

Teoretyczne podstawy informatyki

Tadeusz Pankowski

Drzewo binarne BST. LABORKA Piotr Ciskowski

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

Podstawowe algorytmy i ich implementacje w C. Wykład 9

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

Lista liniowa dwukierunkowa

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.

Matematyczne Podstawy Informatyki

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

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

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

Instrukcje dla zawodników

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

Przecięcia odcinków. Wykład /07

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

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

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

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

Algorytmy i Struktury Danych, 9. ćwiczenia

Algorytmy i Struktury Danych.

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

Algorytmy i struktury danych

Ogólne wiadomości o grafach

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

ALGORYTMY I STRUKTURY DANYCH

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Algorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 5 i 6. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie

Analiza algorytmów zadania podstawowe

Algorytmy i Struktury Danych.

Dynamiczne struktury danych

Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.

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

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmiczna teoria grafów

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

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

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

ALGORYTMY I STRUKTURY DANYCH

Laboratorium nr 7 Sortowanie

Matematyczne Podstawy Informatyki

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

Drzewa podstawowe poj

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.

Transkrypt:

1 Drzewa poszukiwań binarnych Kacper Pawłowski Streszczenie W tej pracy przedstawię zagadnienia związane z drzewami poszukiwań binarnych. Przytoczę poszczególne operacje na tej strukturze danych oraz ich złożoność obliczeniową. Przy okazji zaznajomię czytelnika z najważniejszymi pojęciami Teorii Grafów dotyczącymi tematyki drzew. Na końcu podam przykłady struktur opartych na drzewach BST. 1 Wprowadzenie Drzewa poszukiwań binarnych (ang. Binary Search Tree) są strukturą danych służącą do przechowywania informacji w sposób uporządkowany. Wymogiem jest, aby każdy węzeł miał przypisaną jakąś wartość (tzw. klucz). Przy wyszukiwaniu danego elementu w drzewie stosując porównania kluczy wiadomo, w którym miejscu należy go poszukiwać. Za pomocą operacji In-Order-Tree-Walk możliwe jest wyświetlenie elementów od najmniejszego do największego w czasie Θ(n). Każde drzewo zawiera element główny od którego rozpoczynana jest wędrówka po tej strukturze danych. Ten element nazywamy korzeniem. Pojęcie drzew należy do dziedziny matematyki nazywanej Teorią Grafów (wielu zalicza ją do Matematyki dyskretnej) zapoczątkowanej przez Eulera w XVIII wieku. Czytelnik zainteresowany podstawami teorii grafów warto, aby zaznajomił się z książką [Wil12]. Definicja 1.1 Drzewo binarne Drzewo binarne to drzewo, w którym stopień każdego wierzchołka jest mniejszy równy od 3. Definicja 1.2 Drzewo Graf T jest drzewem wtedy i tylko wtedy, gdy T jest spójny i nie zawiera cykli. Definicja 1.3 Graf spójny Graf jest spójny wtedy i tylko wtedy, gdy istnieje droga łącząca każde dwa dowolne wierzchołki. Definicja 1.4 Stopień wierzchołka Stopień wierzchołka (oznaczany poprzez deg) to liczba krawędzi wychodzących z danego wierzchołka. 2 Operacje na drzewie INSERT(T,x) Wstawianie elementu x do drzewa T Jeżeli element x jest większy równy od węzła y to należy wybrać prawego syna, w przeciwnym wypadku syna lewego.

Require: T - drzewo, x - element do wstawienia 1: curr root(t ) 2: while curr NULL do 3: father curr; 4: if x >= curr.value then 5: curr curr.right 6: else 7: curr curr.lef t 8: end if 9: end while 10: if father NULL then 11: if x >= father.value then 12: f ather.right.value x 13: else 14: f ather.lef t.value x 15: end if 16: else 17: f ather.value x 18: end if DELETE(T,x) Usuwanie elementu x z drzewa T W przypadku operacji DELETE należy najpierw znaleźć przy pomocy SEARCH element, który chce się usunąć. Sprawdzić, którym synem swojego ojca jest ten element i podstawić za usuwany element odpowiadającego syna tego elementu, następnie dla drugiego syna należy odnaleźć nowe miejsce w drzewie. SEARCH(T,x) Wyszukiwanie elementu x w drzewie T Require: T - struktura drzewa, x - poszukiwany węzeł 2: while node do 3: if x = node.value then 4: return node 5: else 6: if x >= node.value then 7: node node.right 8: else 9: node node.lef t 10: end if 11: end if 12: end while MINIMUM(T) Znajdowanie najmniejszego elementu w drzewie T Require: T - struktura drzewa

2: while node.left NULL do 3: node node.lef t 4: end while 5: return node MAXIMUM(T) Znajdowanie największego elementu w drzewie T Require: T - struktura drzewa 2: while node.right NULL do 3: node node.right 4: end while 5: return node INORDERTREEWALK(T) Wyświetlenie elementów w drzewie od najmniejszego do największego 1: node T 2: if node NULL then 3: if node.left NULL then 4: INORDERTREEWALK(node.left) 5: end if 6: Wyswietl node.value 7: if node.right NULL then 8: INORDERTREEWALK(node.right) 9: end if 10: end if 3 Złożoność obliczeniowa Najbardziej pesymistycznym przypadkiem dla operacji wykonywanych na drzewie jest przypadek, w którym drzewo jest izomorficzne z grafem liniowym oraz korzeń posiada tylko jednego, lecz konkretnego dla danej operacji, syna (w przypadku niektórych operacji jest to wręcz sytuacja najkorzystniejsza). Definicja 3.1 Graf liniowy Graf liniowy to graf powstały poprzez usunięcie dowolnej krawędzi z grafu cyklicznego (2-regularnego). Dla operacji MINIMUM korzeń, który jest największym elementem drzewa w tym wypadku jest przypadkiem pesymistycznym o złożoności O(n). Z kolei korzeń, który jest najmniejszym elementem drzewa, a więc nie posiada lewego syna, jest przypadkiem najkorzystniejszym. Analogicznie wygląda operacja MAXIMUM. Złożoność tych operacji dla danego drzewa jest rzędu O(h), gdzie h jest wysokością drzewa.

Definicja 3.2 Wysokość drzewa Wysokością drzewa nazywamy maksymalną liczbę wierzchołków, którą odwiedzamy wykonując tylko operacje przejścia na jednego z synów, od korzenia do danego liścia (bez liścia). Własność 3.1 Jeżeli graf T jest drzewem i zawiera n wierzchołków to T posiada n 1 krawędzi. W przypadku operacji wstawiania INSERT oraz operacji wyszukiwania SEARCH łatwo jest zauważyć, że podobnie jak w przypadku operacji MINIMUM oraz MAXIMUM złożoność pesymistyczna jest ograniczona poprzez O(h), czyli w najbardziej pesymistycznym przypadku znów mamy O(n) (a dla drzew pełnych O(log 2 n)). Nieco podobnie wygląda rzecz z operacją DELETE, gdyż wykorzystuje ona właściwie, z operacji bardziej czasochłonnych, tylko SEARCH oraz INSERT. Taki przypadek wystę- Oczekiwany wynik powyższych operacji to O(log 2 n). puje dla drzew zrównoważonych i pełnych. W przypadku operacji INORDERTREEWALK mamy do czynienia ze złożonością rzędu θ(n). Fachowe dowody złożoności poszczególnych operacji można znaleźć na przykład w książce [CLRS12]. 4 Możliwe ulepszenia i metody implementacji Drzewa binarne mogą również zawierać mechanizmy odpowiedzialne za ich balansowanie. Przykładem takich drzew są drzewa czerwono-czarne (RB-Tree), w których po operacji INSERT są wykonane w razie potrzeby operacje rotacji (w lewo bądź prawo). W przypadku olbrzymiej ilości węzłów w drzewie warto, aby wysokość struktury danych była jak najmniejsza. W tym wypadku warto rozważyć implementację B-drzewa. Czytelnik zainteresowany tą tematyką znajdzie potrzebne informacje w [CLRS12]. Implementując drzewo binarne należy wpierw zastanowić się jak ta struktura ma być przechowywana w pamięci komputera. Najbardziej popularne są dwie metodyki implementacji. Jedna to dynamiczne alokowanie potrzebnej pamięci i wykorzystanie wskaźników, a druga nieco łatwiejsza, ale narzucająca pewne ograniczenia pamięciowa to metoda trzymania drzewa w tablicy. Wtedy elementem zerowym tablicy jest korzeń, lewy syn ma numer 1, prawy syn numer 2. Dzieci lewego syna to elementy 3 i 4 itd. Warto przy tym pamiętać, że element i może mieć dwóch synów oznaczanych jako 2i + 1 oraz 2i + 2. Ojcem elementu j jest element i 1 2. 5 Podsumowanie Drzewa poszukiwań binarnych to jedna z podstaw przy studiowaniu algorytmów. Standardową implementację można ulepszać poprzez stosowanie wszelkich rotacji. Najważniejszą cechą drzew są ich własności logarytmiczne (występujące w

przypadkach oczekiwanych) związane z wysokością. Właśnie dzięki temu drzewa znacząco ułatwiają poszukiwania wybranych elementów. W zasadzie umożliwiają przechowywanie dowolnych danych, przy których stosuje się skalę porównawczą. Wykorzystując BST można oprogramować np. kolejkę priorytetową (ang. Priority Queue), czy strukturę umożliwiającą w czasie Θ(n) wyświetlenie wprowadzonych danych w porządku niemalejącym. Literatura [CLRS12] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Wprowadzenie do algorytmów. Wydawnictwo Naukowe PWN, 2012. [Wil12] Robin J. Wilson. Wprowadzenie do teorii grafów. Wydawnictwo Naukowe PWN, 2012.