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

Podobne dokumenty
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 czerwono-czarne.

Algorytmy i Struktury Danych

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

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 2. Drzewa zbalansowane AVL i 2-3-4

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 3. Drzewa czerwono-czarne

Algorytmy i Struktury Danych

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

Sortowanie bąbelkowe

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

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

Algorytmy i struktury danych. wykład 5

Struktury Danych i Złożoność Obliczeniowa

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

Drzewa poszukiwań binarnych

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Listy, kolejki, stosy

ALGORYTMY I STRUKTURY DANYCH

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

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

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

Algorytmy i Struktury Danych

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.

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

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

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

Podstawy Informatyki. Metody dostępu do danych

Porządek symetryczny: right(x)

Lista liniowa dwukierunkowa

Wykład 5. Sortowanie w czasie liniowologarytmicznym

Sortowanie - wybrane algorytmy

Drzewa poszukiwań binarnych

Teoretyczne podstawy informatyki

Drzewa wyszukiwań binarnych (BST)

Struktury danych: stos, kolejka, lista, drzewo

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

Ogólne wiadomości o drzewach

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

Tadeusz Pankowski

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

Sortowanie. Bartman Jacek Algorytmy i struktury

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

PODSTAWY INFORMATYKI wykład 6.

Teoretyczne podstawy informatyki

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

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

Wstęp do programowania

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

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

Definicja pliku kratowego

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

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

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

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

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

Stos LIFO Last In First Out

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

Strategia "dziel i zwyciężaj"

Podstawy Informatyki. Wykład 6. Struktury danych

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

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Drzewo binarne BST. LABORKA Piotr Ciskowski

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

Algorytmy i Struktury Danych, 9. ćwiczenia

Drzewa AVL definicje

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

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

Algorytmy i struktury danych

Ogólne wiadomości o grafach

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

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

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

INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra

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

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

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

Drzewa podstawowe poj

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

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

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

Poprawność semantyczna

Algorytmy i struktury danych

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

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytm selekcji Hoare a. Łukasz Miemus

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

Przykładowe B+ drzewo

KOPCE KOLEJKI PRIORYTETOWE - PRZYPOMNIENIE KOPCE WYSOKOŚĆ KOPCA KOPCE I KOLEJKI PRIORYTETOWE PROJEKTOWANIE ALGORYTMÓW I METODY SZTUCZNEJ INTELIGENCJI

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Algorytmy i struktury danych Struktury danych IS/IO, WIMiIP

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

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

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

Transkrypt:

POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 204/205 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 2 : Drzewa BST c.d., równoważenie drzew, kopce.

Wyświetlanie drzewa BST - c.d. 2 void WyswietlDrzewo (Twezel *wezel) { // porządek preorder if (wezel!= NULL) { cout << wezel->dane << " "; WyswietlDrzewo (wezel->lewy); WyswietlDrzewo (wezel->prawy); } } Kolejność wyświetlania wartości w węzłach: 5,, 2,, 4, 8, 6,, 9 void WyswietlDrzewo (Twezel *wezel) { // porządek postorder if (wezel!= NULL) { WyswietlDrzewo (wezel->lewy); WyswietlDrzewo (wezel->prawy); cout << wezel->dane << " "; } } Kolejność wyświetlania wartości w węzłach:, 2, 4,,, 6, 9, 8, 5

Poszukiwanie węzła w drzewie BST bool ZnajdzWezel (Twezel* wezel, int wartosc) { // funkcja zwraca wartość true, jeżeli udało się jej znaleźć // wartość, w przeciwnym razie zwraca wartość false if (wezel == NULL) return false; else if (wartosc < wezel->dane) return ZnajdzWezel (wezel->lewy, wartosc); else if (wartosc > wezel->dane) return ZnajdzWezel (wezel->prawy, wartosc); else return true; }

Poszukiwanie węzła c.d., usuwanie całego drzewa BST 4 porównaj z rekurencyjną procedurą usuwania listy (s. 6 wykładu ) void UsunDrzewo (Twezel *&wezel) { Twezel *pom; if (wezel!= NULL) { UsunDrzewo (wezel->lewy); UsunDrzewo (wezel->prawy); pom = wezel; wezel = NULL; delete pom; } }

Algorytm usuwania węzła w drzewie BST 5 Należy usunąć węzeł o podanej wartości. Mogą wystąpić przypadki:. Brak takiego węzła 2. Węzeł usuwany ma co najwyżej jednego potomka ( może też być liściem drzewa ) Adres usuwanego węzła zastępuje się adresem jego potomka ( lub NULL ). Węzeł usuwany ma dwóch potomków a) Usuwany węzeł zostaje zastąpiony przez skrajny prawy węzeł jego lewego poddrzewa (czyli największy element lewego poddrzewa) lub: b) Usuwany węzeł zostaje zastąpiony przez skrajny lewy węzeł jego prawego poddrzewa (czyli najmniejszy element prawego poddrzewa) UWAGA : Zastąpienie takie zawsze jest możliwe, bo skoro węzeł jest skrajny, to ma co najwyżej jednego potomka. UWAGA 2: Każdą z operacji a) i b) da się więc wykonać, najlepiej je wykonywać losowo (lub na przemian). Przypadek 2. 5 Przypadek. 5 8 8 2 4 6 9 2 4 6 9

Przykład - usuwanie węzłów 6 węzeł usuwany węzeł zajmujący miejsce węzła usuwanego 5 5 8 8 2 4 6 9 4 6 9 2 5 6 9 9 4 6 4 4

Drzewa zrównoważone - wprowadzenie Struktura drzewa BST zależy od kolejności, w jakiej zostały utworzone węzły. Nowe węzły wstawiane są jako liście drzewa 5 8 2 4 6 9 Kolejność tworzonych węzłów drzewa BST: 5,, 8, 2, 6, 4, 9,, lub 5, 8, 9,, 6, 2, 4,, lub... 2 4 5 Kolejność tworzonych węzłów:, 2,, 4, 5, 6,, 8, 9 6 8 9 Ilość poziomów (wysokość drzewa): 4 Ilość poziomów (wysokość drzewa): 9 Drzewa wyważone ( zrównoważone ) Zapewniają optymalny stosunek ilości poziomów do ilości węzłów Przykłady: drzewa AVL, drzewa czerwono-czarne (RBT).

Operacje rotacji - przywracanie wyważenia węzła drzewa 8 a, b, d - dowolne poddrzewa // rotacja w prawo względem Q if (Q->Lewy == P) { Q->Lewy = P->Prawy; P-> Prawy = Q; Q = P; // nowym korzeniem // tego poddrzewa będzie teraz P } Operacje rotacji zachowują porządek inorder // rotacja w lewo względem P if (P->Prawy == Q) { P-> Prawy = Q-> Lewy; Q-> Lewy = P; P = Q; // nowym korzeniem // tego poddrzewa będzie teraz Q }

Aplet Drzewo binarne - równoważenie drzewa 9 Wskaźniki wyważenia w węzłach (bezwzględna różnica wysokości) uzyskuje się zaznaczając opcję wagi Rys. 2. Drzewo zrównoważone - po wykonaniu rotacji w prawo względem węzła=4 (bo zaznaczamy prawym przyciskiem myszki prawego potomka węzła 4, czyli węzeł =) Rys.. Drzewo początkowe - niezrównoważone Bardzo często trzeba wykonać więcej rotacji, by uzyskać drzewo zrównoważone. Maksymalna liczba koniecznych rotacji dla drzewa o n węzłach jest rzędu lg(n).

Definicja drzewa AVL (Adelson-Velskij i Landis, 962 r.) 0 Drzewo dokładnie wyważone Dla każdego węzła ilość węzłów jego lewego i prawego poddrzewa może różnić się tylko o jeden Drzewo wyważone AVL Dla każdego węzła wysokość jego lewego i prawego poddrzewa może się różnić tylko o jeden Wskaźnik wyważenia węzła Wsk = H P H L w w w Wskaźnik wyważenia węzła, czyli różnica wysokości dla lewego i prawego jego poddrzewa, jest pamiętany w węźle. H L Wsk > 0 H P H L H P H P H L Wsk = 0 Wsk < 0 Przykłady 5 0 5 + 5 +2 5 + - 8 - + 8-0 8 - + 8-2 6 + 2-4 0 9 0 4 0 9 0 6 + 6 + 9 0 4 0 6 + 0 Drzewo AVL 0 Drzewo AVL 0 0 Drzewo niewyważone 0 Drzewo niewyważone 0

Drzewa czerwono-czarne (RBT - Red Black Tree), 92-8 r. (R. J. Guibas, R. Sedgewick) Drzewo czerwono-czarne Drzewo wyszukiwań binarnych, w którym każdy węzeł zawiera dodatkowe pole Kolor ( bit), który może być czerwony (Red) lub czarny (Black). Narzucenie odpowiednich warunków na kolory w węzłach gwarantuje, że drzewo jest w przybliżeniu zrównoważone, a przywrócenie jego własności wymaga co najwyżej dwóch operacji rotacji (!). Własności drzew RBT Drzewo BST jest drzewem czerwono-czarnym (RBT), jeśli ma następujące własności czerwono-czarne: * każdy węzeł jest albo czerwony, albo czarny * korzeń jest czarny * każdy liść (NULL) jest czarny * jeśli węzeł jest czerwony, to obaj jego synowie są czarni (a zatem każdy czerwony węzeł ma czarnego ojca) * każda prosta ścieżka z ustalonego węzła do dowolnego liścia ma tyle samo czarnych węzłów (jest to tzw. czarna głębokość węzła).

Drzewa czerwono-czarne pochylone w lewo - 2008 r. 2 Prostszy sposób rysowania drzew RBT - bez liści, bo wiadomo, że wszystkie liście są czarne i nie zawierają istotnych danych. Autor: Robert Sedgewick, Princeton University Drzewa LLRBT (Left Leaning Red Black Trees) algorytmy bardzo uproszczone względem RBT (kosztem większej liczby koniecznych rotacji), dzięki dodatkowej własności: * Prawy syn jest czerwony tylko i wyłącznie wtedy, gdy czerwony jest również lewy syn. Najkrótsza ścieżka w drzewach RBT ma wszystkie węzły czarne, najdłuższa- czarne i czerwone na przemian. Każda gałąź jest więc co najwyżej dwa razy dłuższa niż dowolna inna (bo na każdej musi być tyle samo czarnych węzłów). Wysokość drzewa RBT o n węzłach wewnętrznych wynosi co najwyżej 2lg (n+) Operacje wstawiania węzła i usuwania węzła wykonują się w czasie proporcjonalnym do lg n Przewaga drzew czerwono-czarnych nad drzewami AVL polega na tym, że RBT w tych najgorszych przypadkach wymagają mniej operacji rotacji podczas wstawiania lub usuwania węzła. Natomiast drzewa AVL lepiej się sprawdzają w operacjach wyszukiwania (bo są lepiej wyważone).

Zastosowanie drzew binarnych - drzewa wyrażeń Bryły CSG - reprezentowane przez drzewa wyrażeń (bryły podstawowe w liściach + operacje logiczne w węzłach)

Kopiec czyli sterta 4 Jeśli i oznacza indeks węzła, to indeks ojca wynosi i/2, czyli część całkowitą z połowy wartości i indeks lewego potomka wynosi 2i indeks prawego potomka wynosi 2i+ Służy do implementacji kolejki priorytetowej, która pozwala usunąć z kolejki element o największym kluczu Każdy element w węźle ma wartość nie większą niż jego ojciec największy element jest więc zawsze na pozycji korzenia, a elementy w kopcu mogą się powtarzać Każdy poziom drzewa poza ostatnim jest całkowicie wypełniony

Wstawianie elementu do kopca i przywracanie własności kopca () 5 wstaw krok wstaw krok 2 najpierw dodajemy wstawiany element jako nowy liść na najniższym poziomie następnie, w razie potrzeby, przesuwamy ten element na wyższe poziomy (zamieniając z kolejnymi ojcami), aż do momentu, gdy całe drzewo będzie posiadało własność kopca

Wstawianie elementu do kopca i przywracanie własności kopca (2) 6 wstaw krok Sortowanie przez kopcowanie (heapsort) pobranie największego elementu i zamiana z ostatnim elementem zmniejszenie rozmiaru kopca i przywrócenie jego własności (zamiana ojca z większym z synów wykonywana rekurencyjnie od korzenia w dół) pobranie największego elementu itd.