Drzewa podstawowe poj

Podobne dokumenty
Drzewa AVL definicje

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

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

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

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

Algorytmy i struktury danych. wykład 5

Porządek symetryczny: right(x)

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

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:

Teoretyczne podstawy informatyki

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

ALGORYTMY I STRUKTURY DANYCH

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

Podstawy Informatyki. Metody dostępu do danych

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

Teoretyczne podstawy informatyki

Listy, kolejki, stosy

Algorytmy i struktury danych

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

ALGORYTMY I STRUKTURY DANYCH

Algorytmy i Struktury Danych

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

Zmienne dynamiczne. nazwy; odwo lania do nich sa za pomoca być tworzone jawnie procedura zmienne dynamiczne maja

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

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

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

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

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

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

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

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

Algorytmy i Struktury Danych

PODSTAWY INFORMATYKI wykład 6.

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

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

Tadeusz Pankowski

Drzewa czerwono-czarne.

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

Drzewa poszukiwań binarnych

Algorytmy i Struktury Danych.

Matematyka dyskretna - 7.Drzewa

ALGORYTMY I STRUKTURY DANYCH

Lista liniowa dwukierunkowa

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

Sortowanie bąbelkowe

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

Drzewa wielokierunkowe trie

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Ogólne wiadomości o grafach

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

Podstawy Informatyki. Wykład 6. Struktury danych

Co to są drzewa decyzji

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

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

Poprawność semantyczna

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Wykład 3. Drzewa czerwono-czarne

7a. Teoria drzew - kodowanie i dekodowanie

Przykładowe B+ drzewo

Struktury Danych i Złożoność Obliczeniowa

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

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

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

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Wyk lad 7: Drzewa decyzyjne dla dużych zbiorów danych

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

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

P. Urzyczyn: Materia ly do wyk ladu z semantyki. Uproszczony 1 j. ezyk PCF

TEORETYCZNE PODSTAWY INFORMATYKI

Definicja pliku kratowego

Algorytm obejścia drzewa poszukiwań i zadanie o hetmanach szachowych

TEORETYCZNE PODSTAWY INFORMATYKI

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

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Tablice hashowe. indeksowana

Drzewa poszukiwań binarnych

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

Drzewa wyszukiwań binarnych (BST)

Systemy decyzyjne Wyk lad 4: Drzewa decyzyjne

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

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

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

Paradygmaty programowania. Paradygmaty programowania

Wstęp do programowania

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

Drzewa decyzyjne. Nguyen Hung Son. Nguyen Hung Son () DT 1 / 34

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

Egzaminy i inne zadania. Semestr II.

Nierówność Krafta-McMillana, Kodowanie Huffmana

Generacja kodu docelowego

Algorytmy i struktury danych

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

Wykład 14. Środowisko przetwarzania

Algorytmy i struktury danych

Podstawy Programowania. Listy i stosy

Temat: Algorytm kompresji plików metodą Huffmana

Ćwiczenie 6. Hurtownie danych

Wykłady z Matematyki Dyskretnej

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

Transkrypt:

Drzewa podstawowe poj ecia drzewo graf reprezentujacy regularna strukture wskaźnikowa, gdzie każdy element zawiera dwa lub wiecej wskaźników (ponumerowanych) do takich samych elementów; wez ly (albo wierzcho lki) grafu reprezentuja elementy pamieciowe, a luki reprezentuja wskaźniki drzewo binarne każdy element zawiera dok ladnie dwa wskaźniki korzeń element drzewa, od którego zaczynaja sie wskaźniki do pozosta lych elementów liście elementy drzewa, których oba wskaźniki sa puste (NIL) wewnetrzne wez ly drzewa wez ly, które nie sa ani liściami ani korzeniem ścieżka ciag wez lów biegnacy zgodnie ze wskaźnikami od korzenia do jakiegoś liścia poddrzewo drzewo, które jest ca lkowicie zawarte w innym drzewie rzad drzewa liczba wskaźników ( 2) w jednym weźle drzewa (niektóre z nich sa NIL) wysokość d lugość najd luższej ścieżki drzewa log k (N + 1) h k (N) N waga ca lkowita liczba wez lów w drzewie Drzewa binarne 1

Struktury drzewiaste grafy skierowane A B C 7 D E F tekstowe listy symboli G (A,(B,(D), (A (B (D) (E), (E) (F)), (F)) (), () (C,(G), (C (G) (), () ())) ())) (A,(B,(D),(E),(F)),(),(C,(G),(),())) (A,(B,(D),(E),(F)),(),(C,(G))) zbiory zagnieżdżone D E B F G C A typ danych drzew binarnych TYPE T_Drzewo = ^T_Element; T_Element = RECORD info: T_info; lewe: T_Drzewo; prawe: T_Drzewo; END; Drzewa binarne 2

Dodawanie elementu do drzewa (1) PROCEDURE DodajElement1(VAR drzewo: T_Drzewo; element: T_Drzewo); { wersja minimalna } element^.lewe := drzewo; element^.prawe := NIL; drzewo := element; END; {DodajElement1} zmienne statyczne pami eć dynamiczna El: BD: info lewe prawe NIL info lewe prawe info lewe prawe info lewe prawe Drzewa binarne 3

diagram uproszczony tworzonego drzewa binarnego: BD: El: procedura DodajElement1 tworzy drzewa zdegenerowane! 6 5 4 3 2 1 Drzewa binarne 4

Dodawanie elementu do drzewa (2) PROCEDURE DodajElement2(VAR drzewo: T_Drzewo; element: T_Drzewo); { wersja ulepszona } IF drzewo = NIL THEN drzewo := element ELSE IF drzewo^.lewe = NIL THEN drzewo^.lewe = element ELSE IF drzewo^.prawe = NIL THEN drzewo^.prawe = element ELSE element^.lewe := drzewo; element^.prawe := NIL; drzewo := element; END END; {DodajElement2} 2 1 otrzymane drzewo nie jest wiele lepsze! 4 3 6 5 8 7 3 12 10 11 9 Drzewa binarne 5

Dodawanie elementu do drzewa (3) PROCEDURE DodajElement3(VAR drzewo: T_Drzewo; element: T_Drzewo); { wersja "optymalna" } IF drzewo = NIL THEN drzewo := element ELSE IF Waga(drzewo^.lewe) < Waga(drzewo^.prawe) THEN DodajElement3(drzewo^.lewe, element) ELSE DodajElement3(drzewo^.prawe, element); END; {DodajElement3} procedura tworzy drzewa zrównoważone Definicja: drzewo binarne nazywamy zrównoważonym albo: w pe lni zrównoważonym, albo: dok ladnie zrównoważonym, albo: zrównoważonym wagowo, jeżeli dla każdego wez la liczby wez lów w jego lewym i prawym poddrzewie (czyli wagi tych poddrzew) różnia sie co najwyżej o 1 Drzewa binarne 6

Przeszukiwanie drzew binarnych FUNCTION Wyszukaj(drzewo: T_Drzewo; elem_wzorc: T_Element; FUNCTION PorownajEl(e1,e2:T_Element):CHAR): T_Drzewo; {znajd.na drz.el.rownowazny danemu;zwraca wsk.el.,lub NIL gdy go nie ma} VAR test: T_Drzewo; IF drzewo=nil THEN Wyszukaj := NIL ELSE IF PorownajEl(elem_wzorc, drzewo^) = = THEN Wyszukaj := drzewo ELSE test := Wyszukaj(drzewo^.lewe, elem_wzorc, PorownajEl); IF test <> NIL THEN Wyszukaj := test ELSE Wyszukaj := Wyszukaj(drzewo^.prawe, elem_wzorc, PorownajEl); END END; {Wyszukaj} Ćwiczenie: przepisać powyższa funkcje w wersji iteracyjnej! Drzewa binarne 7

Przegladanie drzew binarnych PROCEDURE Przegladaj(Drzewo: T_Drzewo; PROCEDURE Op(e:T_Element)); IF Drzewo<>NIL THEN Op(Drzewo^); (* porzadek "preorder" *) Przegladaj(Drzewo^.lewe); Przegladaj(Drzewo^.prawe); END; END; {Przegladaj} przydatne porzadki przegladania drzewa binarnego: preorder: najpierw korzeń, potem ca le lewe poddrzewo, potem prawe inorder: najpierw lewe poddrzewo, nast epnie korzeń, na końcu prawe postorder: najpierw lewe poddrzewo, potem prawe, na końcu korzeń Drzewa binarne 8

Drzewa uporzadkowane Definicja: drzewo binarne jest uporzadkowane gdy dla wszystkich wez lów drzewa spe lniona jest w lasność wszystkie elementy w lewym poddrzewie < korzeń < wszystkie elementy w prawym poddrzewie zyskujemy na przeszukiwaniu: FUNCTION Wyszukaj(drzewo: T_Drzewo; elem_wzorc: T_Element; FUNCTION PorownajEl(e1,e2:T_Element):CHAR): T_Drzewo; IF drzewo=nil THEN Wyszukaj := NIL ELSE CASE PorownajEl(elem_wzorc, drzewo^) OF < : Wyszukaj := Wyszukaj(drzewo^.lewe, elem_wzorc, PorownajEl); = : Wyszukaj := drzewo; > : Wyszukaj := Wyszukaj(drzewo^.prawe, elem_wzorc, PorownajEl); END; {CASE} END; {Wyszukaj} wysokość drzewa binarnego o N w ez lach: log 2 (N + 1) h N N Drzewa binarne 9

Dodawanie elementu do drzewa (4) dodawanie uporzadkowane jest bardzo podobne do wyszukiwania: praktycznie znajdujemy miejsce gdzie element powinien w drzewie sie znaleźć, po czym go tam wklejamy PROCEDURE DodajElement4(VAR drzewo: T_Drzewo; element: T_Drzewo; FUNCTION PorownajEl(e1,e2:T_Element):CHAR); IF drzewo=nil THEN drzewo := Element ELSE CASE PorownajEl(element^, drzewo^) OF < : DodajElement4(drzewo^.lewe, element, PorownajEl); = : WRITELN( Element juz jest na drzewie! ); > : DodajElement4(drzewo^.prawe, element, PorownajEl); END; END; {DodajElement4} Drzewa binarne 10

Budowa drzew uporzadkowanych Od czego zależy wysokość drzewa utworzonego procedura uporzadkowanego dodawania elementów? Rozważmy przypadki skrajne: ciag elementów: A B C D E F... X Y Z wysokość drzewa bedzie 26 (= N) ciag elementów: M F T C I P W... A L N Z wysokość drzewa bedzie 5 ( log 2 (N)) Z la wiadomość: wysokość tak tworzonych drzew uporzadkowanych może wahać sie od log 2 (N) do N Dobra wiadomość: średnia oczekiwana wysokość drzewa tworzonego z przypadkowej sekwencji N elementów 1.4 log 2 (N) Drzewa binarne 11

Drzewa binarne 12

Usuwanie elementu z drzewa PROCEDURE UsunElement(VAR drzewo: T_Drzewo; element: T_Drzewo); FUNCTION PorownajEl(e1,e2:T_Element):CHAR); { wylacza z drzewa podany element } IF drzewo=nil THEN WRITELN( Nie ma takiego elementu ) ELSE CASE PorownajEl(element^, drzewo^) OF < : UsunElement(drzewo^.lewe, element, PorownajEl); > : UsunElement(drzewo^.prawe, element, PorownajEl); = : IF drzewo^.lewe=nil THEN drzewo := drzewo^.prawe ELSE IF drzewo^.prawe=nil THEN drzewo := drzewo^.lewe ELSE DodajElement4(drzewo^.lewe, drzewo^.prawe, Porownaj); drzewo := drzewo^.lewe; END; END; {CASE} END; {UsunElement} niestety, metoda pogarsza zrównoważenie D L E D P D L D P Drzewa binarne 13

Usuwanie elementu z drzewa (2) ciekawy pomys l: aby usunać z drzewa element E, przenosimy na jego miejsce maksymalny element jego lewego poddrzewa (albo minimalny element poddrzewa prawego); w ten sposób sprowadzamy usuwanie wez la do usuwania liścia D L MAX DL E D P MIN DP niestety, tej metody nie zawsze można użyć, bo nie zawsze MAX DL (albo MIN DP ) b edzie liściem w drzewie uzupe lnienie pomys lu: jeśli MAX DL nie jest liściem to po przeniesieniu go na miejsce w ez la E usuwamy go z kolei wywo laniem rekurencyjnym D L E MAX DL D P Drzewa binarne 14

Zastosowanie drzew uporzadkowanych Podsumujmy: rozważamy struktury danych do przechowywania elementów np. jakiejś bazy danych. Dynamiczna struktura danych odpowiednikiem statycznej tablicy nieuporzadkowanej jest lista wskaźnikowa. Pomimo iż tablica, w odróżnieniu od listy, zapewnia bezpośredni dostep do wszystkich elementów, bez sekwencyjnego przeszukiwania, to bez uporzadkowania elementów każde przeszukiwanie i tak musi być sekwencyjne. W takim razie dynamicznym odpowiednikiem tablic uporzadkowanych sa drzewa uporzadkowane. W jednych i drugich możliwe jest niesekwencyjne wyszukanie konkretnego elementu. Jednak w przypadku drzew uporzadkowanych liczba (albo czas) operacji niezbednych do dotarcia do elementu zależy od zrównoważenia drzewa, nad którym nie umiemy zapanować (na razie). Jednak zagadnienie równoważenia drzew uporzadkowanych jest trudne nie jest znana praktyczna metoda tworzenia drzew uporzadkowanych i jednocześnie w pe lni zrównoważonych. Podobnie nie istnieje żadna efektywna metoda równoważenia już zbudowanego drzewa. Jak sie okaże, najlepszym rozwiazaniem sa drzewa cześciowo zrównoważone. Drzewa binarne 15

Zagadnienie równoważenia drzew rozważmy dodanie pojedynczego wez la do drzewa uporzadkowanego z zachowaniem równowagi I E M C G K O B D F H J L N H D L B F J N A C E G I K M O struktura drzewa uleg la ca lkowitej zmianie, żaden w eze l nie pozosta l na swoim miejscu Drzewa binarne 16

Inne zastosowania drzewa wyrażeń Drzewa binarne sa przydatne w wielu zastosowaniach, nie tylko do przechowywania elementów jakiejś bazy danych. Jednym z nich sa drzewa wyrażeń reprezentujace wyrażenia algebraiczne wyrażone w jakimś jezyku zawierajacym operatory i operandy. Takie drzewa by ly użyte do reprezentacji wyrażeń Pascala dowolne wyrażenie można przedstawić za pomoca drzewa, którego liście reprezentuja zmienne i sta le, a wez ly wewnetrzne operatory. Drzewa binarne 17

Drzewa binarne 18