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

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

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

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:

Struktury Danych i Złożoność Obliczeniowa

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 X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Porządek symetryczny: right(x)

Drzewa poszukiwań binarnych

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

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

Algorytmy i struktury danych. wykład 5

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

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

Algorytmy i Struktury Danych

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)

Struktury danych: stos, kolejka, lista, drzewo

Listy, kolejki, stosy

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych

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

Teoretyczne podstawy informatyki

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

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

Teoretyczne podstawy informatyki

Struktury danych (I): kolejka, stos itp.

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

Algorytmy i Struktury Danych

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

Drzewa poszukiwań binarnych

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

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

Algorytmy i struktury danych. wykład 8

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

Drzewa czerwono-czarne.

Drzewa wyszukiwań binarnych (BST)

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

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

Analiza algorytmów zadania podstawowe

ALGORYTMY I STRUKTURY DANYCH

Sortowanie bąbelkowe

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

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

Stos LIFO Last In First Out

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

TEORETYCZNE PODSTAWY INFORMATYKI

Wstęp do programowania

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

Kolejka Priorytetowa. Algorytmy i Struktury Danych. (c) Marcin Sydow. Kolejka priorytetowa. implementacja. Kopiec Binarny. Tablicowa.

Sztuczna Inteligencja i Systemy Doradcze

TEORETYCZNE PODSTAWY INFORMATYKI

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

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

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

Drzewa podstawowe poj

Matematyka dyskretna - 7.Drzewa

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

Wykład 6. Wyszukiwanie wzorca w tekście

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

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

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

Algorytmy i struktury danych

Sortowanie topologiczne skierowanych grafów acyklicznych

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

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

a) 7 b) 19 c) 21 d) 34

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

Wstęp do Programowania potok funkcyjny

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Instrukcje dla zawodników

Algorytmy i Struktury Danych.

PODSTAWY INFORMATYKI wykład 6.

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

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

0-0000, , , itd

Programowanie obiektowe

Wprowadzenie do algorytmów / Thomas H. Cormen [et al.]. - wyd. 7. Warszawa, Spis treści. Wprowadzenie 2

1 abbbaabaaabaa -wzorzec: aaba

Strategia "dziel i zwyciężaj"

Programowanie obiektowe

Algorytmy i struktury danych

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

Przykładowe B+ drzewo

Ogólne wiadomości o grafach

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

Podstawy Informatyki. Metody dostępu do danych

Algorytm selekcji Hoare a. Łukasz Miemus

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Algorytmiczna teoria grafów

Teoria obliczeń i złożoność obliczeniowa

Wykład 3. Drzewa czerwono-czarne

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

Metody Kompilacji Wykład 3

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

ALGORYTMY I STRUKTURY DANYCH

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

Algorytmy i Struktury Danych, 9. ćwiczenia

Transkrypt:

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

Drzewa: BST, kopce Definicja drzewa Drzewo (ang. tree) to nieskierowany, acykliczny, spójny graf. Drzewo może być ukorzenione (ang. rooted), to znaczy posiadać korzeń (ang. root) jeden wyróżniony wierzchołek.

Drzewa: BST, kopce Definicja drzewa W drzewie ukorzenionym możemy definiować relacje między wierzchołkami. Jeżeli na drodze z korzenia do jakiegoś wierzchołka u znajduje się przed v, to u jest przodkiem v, a v jest potomkiem u. Bezpośredni przodek to rodzic (ang. parent), a bezpośredni potomek to dziecko (ang. child). Wierzchołki posiadające wspólnego rodzica to bracia (ang. sibling). Wierzchołki nieposiadające dzieci nazywamy liśćmi (ang. leaf ).

Drzewa: BST, kopce Drzewa binarne Jeżeli w drzewie ukorzenionym każdy wierzchołek posiada co najwyżej 2 dzieci, to takie drzewo nazywamy binarnym (ang. binary tree).

Drzewa: BST, kopce Drzewa przeszukiwań binarnych Drzewo przeszukiwań binarnych (ang. binary search tree, BST ) jest strukturą danych, będącą specjalnym przypadkiem drzewa binarnego. Każdy z wierzchołków w takim drzewie posiada przypisaną wartość. Dodatkowo ułożenie tych wartości musi być zgodne z następującą regułą: Wszystkie wartości w lewym poddrzewie danego wierzchołka muszą być mniejsze od wartości tego wierzchołka. Podobnie wszystkie wartości w jego prawym poddrzewie muszą być od wartości tego wierzchołka większe.

Drzewa: BST, kopce Drzewa przeszukiwań binarnych Drzewa przeszukiwań binarnych mogą zostać użyte do zaimplementowania zbioru. Operacje Insert, Member? i Delete mają średnią złożoność obliczeniową O(log n), zaś pesymistyczną O(n).

Drzewa: BST, kopce Drzewa przeszukiwań binarnych procedure Insert(T, v) if v < T.value then if T.left = nil then T.left BST Node(v) else Insert(T.left, v) end if else if T.right = nil then T.right BST Node(v) else Insert(T.right, v) end if end if end procedure

Drzewa: BST, kopce Drzewa przeszukiwań binarnych procedure Member?(T, v) if T = nil then return false else if v = T.value then return true else if v < T.value then return Member?(T.left, v) else return Member?(T.right, v) end if end procedure

Drzewa: BST, kopce Kopiec binarny Kopiec binarny (ang. binary heap) to również struktura danych będąca specjalnym przypadkiem drzewa binarnego. Tak jak w przypadku BST, wszystkie wierzchołki posiadają przypisane wartości. Oprócz tego kopiec musi być drzewem prawie pełnym, a wartości w nim muszą spełniać regułę kopca, tj. wszyscy potomkowie danego wierzchołka muszą mieć wartości większe od niego.

Drzewa: BST, kopce Kopiec binarny Kopiec binarny może być użyty do zaimplementowania kolejki priorytetowej, w której operacje Insert, Extract-Minimum i Delete mają złożoność obliczeniową O(log n), a Top O(1).

Drzewa: BST, kopce Kopiec dwumianowy Kopiec dwumianowy (ang. binomial heap) jest strukturą danych opartą na lesie (ang. forest), czyli zbiorze drzew. Umożliwia implementację kolejki priorytetowej, w której operacje Insert, Extract-Minimum i Delete mają złożoność obliczeniową O(log n), Top O(1), a do tego złączenie dwóch kopców jest możliwe w czasie O(log n) (w odróżnieniu od kopca binarnego, gdzie ta operacja zajmuje czas liniowy).

Algorytmy i struktury danych Wyszukiwanie wzorca w tekście Letnie Warsztaty Matematyczno-Informatyczne

Wyszukiwanie wzorca w tekście Istota problemu Mamy dane dwa ciągi znaków: tekst T (ang. haystack) i wzorzec P (ang. needle). Oba z nich są tablicami. Istotą problemu jest znalezienie wszystkich indeksów w tekście takich, że od tego miejsca tekst jest identyczny ze wzorcem (do końca wzorca).

Wyszukiwanie wzorca w tekście Istota problemu Przykładowo, mając dany tekst: abrakadabra i wzorzec ra, wynikami będą 2 i 9 (pamiętaj, że indeksy zaczynają się od 0). Dla tekstu: aaaa i wzorca aa, wynikami będą 0, 1 i 2.

Wyszukiwanie wzorca w tekście Algorytm naiwny Mając dany indeks możemy łatwo sprawdzić, czy jest on poprawnym rozwiązaniem, porównując kolejne znaki w T ze znakami w P. Zajmuje to czas O( P ). Algorytm naiwny sprawdza w ten sposób każdy możliwy indeks (O( T ) sprawdzeń), dając całkowitą złożoność obliczeniową O( P T ). Algorytm ten można przyspieszyć, przerywając sprawdzanie w momencie pierwszego różniącego się znaku, jednak pesymistyczna złożoność obliczeniowa zostaje taka sama.

Wyszukiwanie wzorca w tekście Algorytm Rabina-Karpa Algorytm Rabina-Karpa również opiera się na sprawdzaniu możliwych indeksów, jak algorytm naiwny, jednak zmniejsza liczbę potencjalnych kandydatów, używając funkcji haszującej. Przed wykonaniem właściwego sprawdzenia obliczany jest hasz wzorca, a potem dla każdego indeksu obliczany jest hasz P następnych znaków. Właściwe sprawdzenie wykonywane jest tylko w momencie zgodności haszy.

Wyszukiwanie wzorca w tekście Algorytm Rabina-Karpa Wydawać by się mogło, że nie poprawia to złożoności obliczeniowej (koszt liczenia haszu również wynosi O( P )). Istota optymalizacji polega jednak na tym, że wykorzystujemy taką funkcję haszującą, której wartość w indeksie i można szybko obliczyć na podstawie wartości w indeksie i 1 (tzw. rolling hash).

Wyszukiwanie wzorca w tekście Automaty skończone Do rozwiązania problemu wyszukiwania wzorca w tekście można użyć również automatów skończonych. Automat skończony to graf skierowany, w którym krawędzie mają dodatkowo przypisane symbole (lub grupy symboli) i nazywa się je przejściami. Wierzchołki nazywamy stanami. Jeden ze stanów jest stanem początkowym, jeden jest stanem akceptującym.

Wyszukiwanie wzorca w tekście Automaty skończone Mamy dany tekst i automat skończony zbudowany na podstawie wzorca. Zaczynając od stanu początkowego, przechodzimy między stanami, wybierając przejścia zgodnie z kolejnymi znakami tekstu. Jeżeli znajdziemy się w stanie akceptującym oznacza to, że znajdujemy się w ostatnim znaku dopasowania.