prowadzący dr ADRIAN HORZYK /~horzyk e-mail: horzyk@agh tel.: 012-617 Konsultacje paw. D-13/325



Podobne dokumenty
PODSTAWY INFORMATYKI wykład 6.

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Algorytmy i Struktury Danych

Porządek symetryczny: right(x)

PODSTAWY INFORMATYKI wykład 10.

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

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

Algorytmy i struktury danych. wykład 5

Wstęp do programowania

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

WSTĘP DO INFORMATYKI. Złożoność obliczeniowa, efektywność i algorytmy sortowania

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

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: stos, kolejka, lista, drzewo

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

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Teoretyczne podstawy informatyki

PODSTAWY INFORMATYKI wykład 5.

WSTĘP DO INFORMATYKI. Struktury liniowe

Teoretyczne podstawy informatyki

Programowanie w VB Proste algorytmy sortowania

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych

Sortowanie - wybrane algorytmy

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

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

Tadeusz Pankowski

Programowanie obiektowe

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

Rozwiązywanie problemów metodą przeszukiwania

Algorytmy i Struktury Danych.

ALGORYTMY I STRUKTURY DANYCH

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

ALGORYTMY I STRUKTURY DANYCH

Wstęp do Programowania potok funkcyjny

Programowanie obiektowe

Podstawy Informatyki. Metody dostępu do danych

Stos LIFO Last In First Out

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

Sortowanie bąbelkowe

Algorytm selekcji Hoare a. Łukasz Miemus

TEORETYCZNE PODSTAWY INFORMATYKI

Algorytmy i Struktury Danych, 9. ćwiczenia

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

Drzewa poszukiwań binarnych

Struktury Danych i Złożoność Obliczeniowa

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

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

TEORETYCZNE PODSTAWY INFORMATYKI

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

Lista liniowa dwukierunkowa

Egzaminy i inne zadania. Semestr II.

ALGORYTMY I STRUKTURY DANYCH

0-0000, , , itd

Wykład 5. Sortowanie w czasie liniowologarytmicznym

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

Drzewa poszukiwań binarnych

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

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

Algorytmy i Struktury Danych.

Drzewa podstawowe poj

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

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010

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

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

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Przykładowe B+ drzewo

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

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

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

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

Problem 1 prec f max. Algorytm Lawlera dla problemu 1 prec f max. 1 procesor. n zadań T 1,..., T n (ich zbiór oznaczamy przez T )

Listy, kolejki, stosy

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

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.

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

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

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

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Algorytmy i struktury danych, C3

Algorytmy i struktury danych

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

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Algorytmy i struktury danych

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

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

Kompresja danych Streszczenie Studia Dzienne Wykład 10,

Ogólne wiadomości o grafach

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

Podstawy Informatyki Metody dostępu do danych

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

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Matematyka dyskretna - 7.Drzewa

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

WSTĘP DO INFORMATYKI WPROWADZENIE DO ALGORYTMIKI

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

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

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

Sortowanie przez scalanie

Transkrypt:

PODSTAWY INFORMATYKI WYKŁAD 8. prowadzący dr ADRIAN HORZYK http://home home.agh.edu.pl/~ /~horzyk e-mail: horzyk@agh agh.edu.pl tel.: 012-617 617-4319 Konsultacje paw. D-13/325

DRZEWA Drzewa to rodzaj struktury danych, w której możemy wyróżnić: korzeń (wierzchołek główny) wierzchołki wewnętrzne posiadają swoje poprzedniki (przodków) i następniki (potomków) liście Las to kilka drzew powiązanych razem poziom 1 poziom 2 długość drogi do węzła x poziom 3 poziom 4 = głębokość wysokość

DRZEWA BINARNE Drzewa binarne to taki rodzaj drzew, w których każdy węzeł posiada dwa następniki (dwóch potomków): Wskaźnik KORZEŃ Wsk 1.Wsk Wsk.. 2 1. Wsk 3.Wsk 4. 2. Wsk 5.Wsk 6. 3. 4. Wsk 7.Wsk 8. 5. 6. 7. 8. Implementacja drzewa binarnego przy pomocy tablicy: KORZ. 1. 2. 3. 4. 5. 6. za za za za za za za puste puste 7. 8. za za puste puste

DRZEWA ARYTMETYCZNE Drzewa możemy wykorzystać np. do zapisu operacji matematycznych, tj. +, -, *, / itp. W takich drzewach operacje matematyczne umieszczone są w węzłach drzewa, zaś atrybuty (parametry) w liściach. Drzewa arytmetyczne odwzorowują również w naturalny sposób kolejność wykonywania działań.

PRZESZUKIWANIE DRZEW Drzewa można przeszukiwać na różne sposoby. Można wyróżnić 2 klasyczne algorytmy: BFS breadth first search przeszukiwanie w szerz DFS depth first search przeszukiwanie w głąb Efektywność poszczególnych sposobów przeszukiwania drzew jest zależna od rozwiązywanego problemu. 1 BFS 1 DFS 2 3 4 5 6 2 6 7 11 12 7 8 9 10 11 12 13 3 5 8 9 13 17 18 14 15 16 17 18 19 4 10 14 15 16 19

DRZEWO POSZUKIWAŃ Z WARTOWNIKIEM Jako ostatni węzeł (liść) drzewa ustawiamy zawsze liść, którego pełni rolę wartownika w drzewie. Wskaźnik KORZEŃ Wsk 1.Wsk Wsk.. 2 1. Wsk 3.Wsk 4. 2. Wsk 5.Wsk 6. 3. 4. Wsk 7.Wsk 8. 5. 6. 7. 8. wartownik

DRZEWA DECYZYJNE Każdy węzeł w drzewie decyzyjnym ma etykietę a i : a j dla pewnych i oraz j z przedziału 1 i, j n, gdzie n jest liczbą elementów w ciągu wejściowym. Z każdym liściem związana jest jedna permutacja π(1), π(2),..., π(n). Wykonanie algorytmu sortującego odpowiada przejściu ścieżki od korzenia drzewa decyzyjnego do jednego z jego liści, tj. znalezieniu poprawnej permutacji elementów ciągu. W każdym węźle wewnętrznym zostaje wykonane porównanie typu a i a j. W lewym poddrzewie znajdują się porównania wykonywane przez algorytm, jeśli okaże się, że a i a j, a prawe poddrzewo zawiera możliwe scenariusze dla przeciwnego przypadku, tj. a i > a j. Jeśli algorytm sortujący działa poprawnie, to każda z n! permutacji musi wystąpić jako jeden z liści drzewa decyzyjnego. Długość najdłuższej ścieżki od korzenia drzewa decyzyjnego do dowolnego z jego liści odpowiada pesymistycznej liczbie porównań wykonywanych przez algorytm sortujący. Wszystkie algorytmy sortowania za pomocą porównań można prezentować w postaci drzew decyzyjnych! Każde drzewo decyzyjne, odpowiadające algorytmowi poprawnie sortującemu n elementów, ma wysokość Ω(n lg n).

KOPIEC Kopiec drzewo binarne, w węzłach którego znajdują się elementy reprezentowanego multizbioru S i jest spełniony tzw. warunek kopca, mianowicie: Jeśli węzeł x jest następnikiem węzła y, to element w węźle x jest nie większy niż element w węźle y. Jeśli spełniony jest warunek kopca mówimy, że drzewo ma uporządkowanie kopcowe, a jego elementy zachowują porządek kopcowy. Uporządkowanie kopcowe zapewnia: w korzeniu drzewa znajduje się największy element (lub jeden z największych, gdy jest ich kilka) na ścieżkach w drzewie, od korzenia do liścia, elementy są uporządkowane w porządku nierosnącym.

KOPIEC ZUPEŁNY Kopiec zupełny to kopiec i zarazem zupełne drzewo binarne, czyli takie, w którym wszystkie poziomy są wypełnione całkowicie z wyjątkiem co najwyżej ostatniego, który jest spójnie wypełniony od strony lewej:

KOPIEC ZUPEŁNY Ze względu na regularną strukturę kopca zupełnego, można go reprezentować w prosty sposób w tablicy: Następniki węzła k (o ile istnieją) mają odpowiednio numery 2k i 2k+1, zaś poprzednik węzła k (różny od korzenia) ma numer k/2 :

OPERACJE NA KOPCU ZUPEŁNYM Wstawianie elementu (operacja Wstaw(x, S)) do kopca zupełnego: Usuwanie elementu maksymalnego (operacja UsuńMax(S)) z kopca zupełnego:

OPERACJE NA KOPCU ZUPEŁNYM procedure insert (v : integer); + 1. begin n :=n+1; a[n] := v; upheap (n) end {insert}; // Pesymistyczna złożoność czasowa log n procedura upheap (k : integer); var 1, v : integer; begin v :=a[k]; a[0) : + ; l:= k div 2; {warunek kopca jest zaburzony co najwyżej tylko dla v} while a[l] < v do begin {węzeł l jest poprzednikiem węzła k} a[k] := a[l]; k:=l; l :=l div 2 end; a[k] := v end {upheap};

OPERACJE NA KOPCU ZUPEŁNYM procedure deletemax : integer; // Pesymistyczna złożoność czasowa 2 log n. begin deletemax := a[1]; a[1] := a[n]; n := n 1; downheap(1) end {deletemax}; procedure downheap(k : integer); label 0; var i, j, v : integer; begin v := a[k]; while k n div 2 do begin j := 2 * k; {j jest następnikiem k} if j < n then if a[j] < a[j + 1] then j := j + 1; if v a[j] then goto 0; a[k] := a[j]; k := j end; 0: a[k] := v end {downheap};

OPERACJE NA KOPCU ZUPEŁNYM procedure construct; // Pesymistyczna złożoność czasowa O(n). {Elementy listy q=[a 1,...,a n ] znajdują się w tablicy a[1..n] } var i : integer; begin for i := n div 2 downto 1 do downheap(i) end {construct}; procedure heapsort; // Pesymistyczna złożoność czasowa 2 n log n + O(n) = O(n log n). { Tablica a[1..n] zawiera elementy do posortowania } var m, i : integer; begin m := n; construct; for i := m downto 2 do a[i] := deletemax; n := m end {heapsort};

SORTOWANIE KOPCOWE - HEAPSORT Algorytm sortowania kopcowego daje się zapisać za pomocą operacji kolejki priorytetowej następująco: Buduj(q, S); O(n) Powtórz n-1 razy UsuńMax(S); (n-1)*o(log n) = O(n log n) dla danej listy q=[a 1,...,a n ] charakteryzujący się pesymistyczną złożonością czasową O(n log n).

KOLEJKI PRIORYTETOWE Kolejki priorytetowe struktura danych, która realizuje następujące operacje: Buduj(q, S) - utworzenie multizbioru S={a 1,...,a n } dla danej listy q=[a 1,...,a n ], Wstaw(x, S) - S := S {x}, UsuńMax(S) - usunięcie największego elementu z S. W porównaniu do zwykłej kolejki (FIFO) z kolejki priorytetowej usuwany jest zawsze maksymalny element (czyli element o najwyższym priorytecie).

POLECANA LITERATURA DO WYKŁADU L. Banachowski, K. Diks, W. Rytter: Algorytmy i struktury danych, WNT, Warszawa, 2001 M. Sysło: Elementy Informatyki A.Szepietowski: Podstawy Informatyki R. Tadeusiewicz, P. Moszner, A. Szydełko: Teoretyczne podstawy informatyki W. M. Turski: Propedeutyka informatyki N. Wirth: Wstęp do programowania systematycznego N. Wirth: ALGORYTMY + STRUKTURY DANYCH = PROGRAMY