Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Podobne dokumenty
Programowanie dynamiczne i algorytmy zachłanne

Strategia "dziel i zwyciężaj"

Matematyka dyskretna - 7.Drzewa

Heurystyki. Strategie poszukiwań

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

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

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

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

7a. Teoria drzew - kodowanie i dekodowanie

Schemat programowania dynamicznego (ang. dynamic programming)

Programowanie dynamiczne cz. 2

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

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania

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

Algorytmy i struktury danych IS/IO, WIMiIP

INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA.

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

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

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

Poprawność semantyczna

Temat: Algorytmy zachłanne

Ogólne wiadomości o grafach

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

Wykład 3. Metoda dziel i zwyciężaj

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Sortowanie przez scalanie

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych

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 Równoległe i Rozproszone Część V - Model PRAM II

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

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew

Programowanie dynamiczne

Wstęp do programowania

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH

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

Matematyczne Podstawy Informatyki

TEORETYCZNE PODSTAWY INFORMATYKI

Programowanie sieciowe. Tadeusz Trzaskalik

Heurystyczne metody przeszukiwania

Teoretyczne podstawy informatyki

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.

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

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

Złożoność algorytmów. Wstęp do Informatyki

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.

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

TEORETYCZNE PODSTAWY INFORMATYKI

TEORETYCZNE PODSTAWY INFORMATYKI

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

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

ALGORYTMY I STRUKTURY DANYCH

0-0000, , , itd

Algorytmy i Struktury Danych.

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

ALGORYTMY I STRUKTURY DANYCH

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

Złożoność obliczeniowa klasycznych problemów grafowych

Metody algortmiczne (Algorytmy Część IV)

Algorytmiczna teoria grafów

Digraf. 13 maja 2017

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Zaawansowane algorytmy i struktury danych

Wstęp do programowania

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

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj

SZTUCZNA INTELIGENCJA

Porządek symetryczny: right(x)

Wstęp do programowania

Nierówność Krafta-McMillana, Kodowanie Huffmana

Dynamiczne drzewa. Marian M. Kędzierski. 26 listopada Wstęp Euler-Tour Trees Dynamiczna spójność Algorytm Dinica Link-Cut Trees

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Działanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ).

Sortowanie - wybrane algorytmy

Drzewo binarne BST. LABORKA Piotr Ciskowski

Znajdowanie wyjścia z labiryntu

Metody Kompilacji Wykład 3

Efektywna metoda sortowania sortowanie przez scalanie

Drzewa podstawowe poj

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

Programowanie Współbieżne. Algorytmy

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

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

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

7. Teoria drzew - spinanie i przeszukiwanie

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

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

Algorytmy. wer Wojciech Myszka 30 listopada 2008

Listy, kolejki, stosy

Luty 2001 Algorytmy (7) 2000/2001

Zaawansowane programowanie

Wstęp do programowania

TEORIA GRAFÓW I SIECI

Podejście zachłanne, a programowanie dynamiczne

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

Sztuczna Inteligencja i Systemy Doradcze

Transkrypt:

Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl

Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących wymyślaniu algorytmów. Nie istnieją algorytmy służące do tworzenia algorytmów Istnieją jednak ogólne metody algorytmiczne, które mogą być przydatne w rozwiązywaniu zadań, gdyż pewne algorytmy bezpośrednio z nich wynikają.

W wielu zadaniach algorytmicznych powstaje potrzeba obejścia elementów pewnej struktury, np. w celu znalezienia największego elementu ze zbioru danych przechowywanych w tej strukturze. Każdemu rodzajowi struktury danych odpowiadają różne sposoby obejścia: wektory, listy iteracja (pętla) tablice wielowymiarowe, listy list iteracje zagnieżdżone drzewa rekurencja

Przeszukiwanie drzewa w głąb Cechą charakterystyczną jest to, aby przeszukiwać jak najbardziej na lewo. Strategia ta jest naturalna dla tych problemów i grafów, w których ocena właściwości węzłów zależy ściśle od oceny właściwości ich rodziców.

Przykłady algorytmów przeszukiwania w głąb PREORDER (prefiksowy) korzeń drzewa umieszczony na pierwszym miejscu listy wierzchołków, a dalej znajdują się poddrzewa w kolejności swoich korzeni, np.: R V S U W P Q X Y Z Lista wierzchołków w porządku prefiksowym: R V U W X Y Z S P Q

POSTORDER (postfiksowy) - poddrzewa są umieszczone najpierw i dopiero na końcu znajduje się korzeń (w tym porządku wierzchołek umieszcza się na liście wtedy, gdy jest odwiedzany po raz ostatni), np.: R V S U W P Q X Y Z Lista wierzchołków w porządku postfiksowym: U X Y Z W V P Q S R

INORDER (infiksowy) tylko dla drzew binarnych; korzeń V znajduje się między wierzchołkami poddrzewa, którego korzeniem jest lewe dziecko korzenia R, a wierzchołkami poddrzewa, którego korzeniem jest prawe dziecko korzenia R, np.: R W U V X Ł S Y Z P Q Lista wierzchołków w porządku infiksowym: V W Y X Z R Ł U P S Q

Przeszukiwanie drzewa wszerz Przeszukiwanie wszerz jest strategią warstwową. Rozpoczyna swoje działanie od korzenia i wykonuje ekspansję najpłytszego węzła, ze zbioru węzłów do tej pory nie rozszerzonych. Jako pierwsze strategia w szerz wyznacza rozwiązanie optymalne pod względem długości ścieżki rozwiązania. Poważna wada metody jest duże wymagania na pamięć konieczne jest pamiętanie wszystkich węzłów z przeszukiwanej głębokości.

Metoda dziel i zwyciężaj Metodę stosujemy wówczas gdy rozwiązanie całego zadania jest trudne natomiast pozwala się ono podzielić na zadania prostsze, których rozwiązania po scaleniu daja rozwiązanie zadania pierwotnego W metodzie tej możemy wyróżnić następujące etapy: DZIEL: Dzielimy problem na podproblemy ZWYCIĘŻAJ: Rozwiązujemy podproblemy rekurencyjnie (czyli stosując metodę dziel i zwyciężaj ), chyba że są one małego rozmiaru i do ich rozwiązania wystarczy użyć bezpośrednich metod POŁĄCZ: Łączymy rozwiązania podproblemów, aby otrzymać rozwiązanie całego problemu

Przykłady zastosowania metody dziel i zwyciężaj Sortowanie przez scalanie zasada działania Początek algorytmu 4 2 1 5 8 7 Po pierwszym wywołaniu 4 2 1 5 8 7 Po drugim wywołaniu 4 2 1 5 8 7 Po trzecim wywołaniu 4 2 1 5 8 7

Przykłady zastosowania metody dziel i zwyciężaj Sortowanie przez scalanie

Algorytmy zachłanne Algorytm zachłanny (ang. greedy algorithm) algorytm, który w celu wyznaczenia rozwiązania w każdym kroku dokonuje zachłannego, tj. najlepiej rokującego w danym momencie wyboru rozwiązania częściowego. Innymi słowy algorytm zachłanny nie patrzy czy w kolejnych krokach jest sens wykonywać dane działanie, dokonuje decyzji lokalnie optymalnej, dokonuje on wyboru wydającego się w danej chwili najlepszym, kontynuując rozwiązanie podproblemu wynikającego z podjętej decyzji. Algorytmy zachłanne nie zawsze prowadzą do optymalnych rozwiązań, choć dla szerokiej gamy problemów dają dobre rezultaty.

Przykład zastosowania metody zachłannej Minimalne drzewo rozpinające w grafie Rozważmy sieć miast i przedsiębiorcę, któremu zapłacono za takie ułożenie torów, aby z każdego miasta można było dotrzeć do każdego innego. Ponieważ nasz przedsiębiorca jest bardzo leniwy, interesuje go ułożenie najtańszej (czyli najkrótszej) kombinacji odcinków szyn. Przyjmijmy, że możliwe są tylko takie połączenia miast, jak pokazano na rysunku: 2 10 7 17 12 15 1 9 14 4 8 1 11

Algorytm konstrukcji rozpinających sieci kolejowych Wybierz najkrótszy odcinek drogi; Powtarzaj co następuje, aż do połączenia wszystkich punktów Wybierz najkrótszy odcinek spośród tych odcinków, które łączą jedno z już połączonych miast z jakimkolwiek miastem jeszcze nie połączonym. 10 7 4 2 17 12 15 8 1 9 1 14 11 Aa) ee) 10 7 bb) 10 ff) 10 7 9 cc) 10 4 gg) 10 7 9 dd) 10 4 hh) 10 7 1 9 4 4 4 11 4 11

Programowanie dynamiczne Jest jedną z technik matematycznych poszukiwania rozwiązań optymalnych Określa sposób podejścia do rozwiązywania problemu niż jako pojedynczy uniwersalny algorytm.

Przykład programowania dynamicznego Problem znużonego wędrowca (problem znajdowania najkrótszej ścieżki) Niech będzie dany następujący skierowany graf acykliczny (spójny): C 2 5 F A 14 11 7 D 7 E 5 7 B G

Znużony wędrowiec ma dotrzeć z miasta A do miasta B. Zachłanne podejście do tego zadania dałoby w wyniku następująca ścieżkę: C 2 5 F C F A 11 7 D 14 7 E 5 7 B A D E B G G Jej koszt całkowity wynosi 15.

Najkrótsza droga pomiędzy A i B wynosi 1 i ma postać: C 2 5 A 11 7 E D 14 7 5 F 7 B A 5 D C E 5 F B G G Zachłanność w tym przypadku nie popłaca. Wyznaczenie optymalnego rozwiązania było możliwe dzięki zastosowaniu programowania dynamicznego.

W programowaniu dynamicznym istotną rolę odgrywa zasada optymalności Bellmana. Mówi ona, że jeżeli znamy najlepsza drogę przejścia od punktu początkowego do punktu końcowego prowadząca przez kolejne punkty, to każdy fragment tej drogi pomiędzy dowolnym punktem pośrednim a punktem końcowym jest najlepszą droga przejścia od tego punktu do punktu końcowego.

Realizacja metody wygląda następująco: Niech L(X) długość najkrótszej ścieżki z punktu X do B C 2 5 A 11 7 E D 14 7 G 5 F 7 B L(B)=0, L(G)=, L(E)=5, L(F)=7 L(D)=min(+L(G), 7+L(E))=min(12, 12)=12 L(C)=min(+L(E), 2+L(F))=min(8, 9)=8 L(A)=min(14+L(G), +L(D), 5+L(C))=min(20,15,1)=1 Zatem najkrótsza ścieżka z miasta A do B wynosi 1 i prowadzi przez miasta C i E.