Programowanie dynamiczne i algorytmy zachłanne Tomasz Głowacki tglowacki@cs.put.poznan.pl Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii informatycznych i ich zastosowań w przemyśle" POKL.04.01.02-00-189/10
Podejście dziel i zwyciężaj Problem dzieli się rekurencyjnie na kilka niezależnych podproblemów Rozwiązuje się niezależne problemy Rozwiązania niezależnych problemów scala się do uzyskania rozwiązania wyjściowego problemu Przykłady algorytmów: Merge Sort (sortowanie przez scalanie) Wyszukiwanie binarne 2
Zadanie wyszukiwanie binarne Czy podany uporządkowany ciąg zawiera liczbę 5? 1, 2, 4, 5, 8, 13, 27, 33, 35 3
Zadanie Sortowanie przez scalanie Posortuj poniższy ciąg liczb wykorzystując sortowanie przez scalanie: 32, 5, 7, 13, 12, 17, 25, 1 4
Własność optymalnej podstruktury Optymalne rozwiązanie problemu jest zależne od optymalnych rozwiązań jego podproblemów Optymalne rozwiązanie problemu jest funkcją optymalnych rozwiązań jego podproblemów Problemy posiadające własność optymalnej podstruktury często dają się rozwiązać za pomocą: Programowania dynamicznego Algorytmów zachłannych 5
Programowanie dynamiczne Problem daje się podzielić na podproblemy, które są od siebie zależne Każdy podproblem jest rozwiązywany tylko raz Na każdym etapie rozwiązywania probemu jest podejmowana decyzja, która prowadzi do kolejnego etapu decyzyjnego Decyzja w k-tym etapie procesu decyzyjnego zależy tylko od stanu procesu przy końcu k-1-ego etapu (własność Markowa) Optymalną funkcję celu opisuje równanie rekurencyjne 6
Programowanie dynamiczne przykładowy problem Problem ścieżki o zadanej długości w grafie skierowanym G(V,E): Dany jest dowolny graf skierowany G(V,E) Z każdym łukiem tego grafu związana jest dodatnia waga w(e) Wskazany jest wierzchołek startowy v 1 oraz wierzchołek końcowy v 2 pytanie: Czy istnieje ścieżka o zadanej długości przechodząca przez dowolne wierzchołki tego grafu rozpoczynająca się w v 1 i kończąca w v 2? 7
Programowanie dynamiczne, zadanie 1 Listonosz ma przebyć drogę 12 km. Swoją podróż powinien rozpocząć w mieście A i zakończyć w mieście B. Listonosz może wielokrotnie odwiedzać wszystkie miasta Odległości pomiędzy miastami: A B (2 km) A C (3 km) A D (5 km) B C (4 km) B D (1 km) C D (6 km) 8
Programowanie dynamiczne - Algorytm Viterbiego Ukryty model Markowa: Stany nie są widoczne dla obserwatora Obserwacje są widoczne dla obserwatora Algorytm znajdowania najbardziej prawdpodobnej sekwencji ukrytych stanów (tzw. ścieżka Viterbiego) Najbardziej prawdopodobna sekwencja w stanie t zależy jedynie od sekwencji w czasie t-1 Równanie rekurencyjne ma postać: t max ( j) [ ( i) t 1 1 i N Gdzie A jest tablicą przejść [aij ] B [ ( k)] jest tablicą obserwacji bi [ ] jest tablicą prawdopodobieństw początkowych i a ij ] b i ( O t ), 1 n N 9
Programowanie dynamiczne, zadanie 2 Znaleźć najbardziej prawdopodobną sekwencję stanów dla zdania Amino acid is compound wiedząc, że graf transycji przedstawia się następująco: 10
Algorytmy zachłanne W każdym kroku podejmowana jest lokalnie optymalna decyzja Podjęcie decyzji w danym kroku nie zależy od poprzednich decyzji Metody zachłanne nie gwarantują otrzymania optymalnego rozwiązania dla wszystkich problemów, dla których mogą być wykorzystane - istnieją jednak problemy, dla których te metody zawsze zwracają rozwiązanie optymalne 11
Problem wydawania reszty Polega na wybraniu monet ze zbioru monet o określonych nominałach w ten sposób, aby otrzymać żądaną kwotę przy użyciu minimalnej liczby monet Problem ma praktyczne zastosowanie: Bankomaty Automaty vendingowe 12
Problem wydawania reszty nominały polskie Zbiór dostępnych nominałów N { 1gr,2gr,5gr,10gr,20gr,50gr,1zł,2zł,5zł} Przykłady: 25 gr = 20 gr + 5 gr 30 gr = 20 gr + 10 gr 40 gr = 2 * 20gr 57 gr = 50 gr + 5 gr + 2 gr Czy rozwiązanie zachłanne Z(C) daje ten sam wynik co programowanie dynamiczne D(C)? Z(C) = D(C)? 13
Problem wydawania reszty inne nominały Zbiór nominałów N {1,2,5,10,20,25,50} Przykłady: 24 = 20 + 2 + 2 30 = 20 + 10 30 = 25 + 5 40 = 25 + 10 + 5 Optymalne rozwiązanie dla: 40 = 20 + 20 - rozwiązanie zachłanne nie jest w tym wypadku optymalne 14
Problem wydawania reszty - analiza rozwiązań Analiza optymalności zachłannego algorytmu wydawania reszty powinna być prowadzona dla konkretnego c a nie dla wszystkich możliwych C: Z ( c) D( c) dlapewnego c Jeśli algorytm Z(C) nie jest optymalny, to musi istnieć pewień kontrprzykład istnieje c dla którego: Z ( c) D( c) dla Zostało udowodnione, że dla dowolnego zbioru nominałów N {V } i, takiego że V... 1 i 1 V 2 V n jeśli istnieje kontrprzykład c to musi on się istnieć w przedziale c n 2 1 1 2 V pewnego V V c 15
Problem wydawania reszty - zadanie Sprawdzić, czy metoda zachłanna dla problemu wydawania reszty jest optymalna dla zbioru nominałów N {1,2,5,7} 16
Matroid Niech N będzie skończonym zbiorem, a P niepustą rodziną podzbiorów N. Para (N,P) jest matroidem wtedy i tylko wtedy, gdy spełnione są następujące warunki: 1. Jeśli B P oraz A B, to A P 2. Jeśli A,B P oraz A + 1 = B, to istnieje x B\A, taki że A {x} P 17
Matroid - zadanie Zbudować najmniejszy matroid (N,P) taki, że N = {a,b,c,d} P zawiera zbiór {a,b} 18
Matroid grafowy Niech G=(V,E) będzie nieskierowanym grafem Niech zbiór N = E oraz P = { A : A E i (V,A) jest lasem} Twierdzenie: (N,P) jest matroidem 19
Problem minimalnego drzewa rozpinającego Drzewo rozpinające D(V 1,E 1 ) grafu G(V 2,E 2 ) to drzewo, które zawiera wszystkie wierzchołki tego grafu i podzbiór jego krawędzi: V 1 =V 2 E 1 E 2 Minimalne drzewo rozpinające grafu ważonego G to drzewo rozpinające tego grafu, dla którego suma wag jest najmniejsza 20
Algorytm Kruskala Utwórzenie lasu L(V,E 2 ) z wierzchołków grafu G(V,E 1 ) V 2 = V 1 E2 = Za zbiór S przyjmij zbiór wszystkich krawędzi E 1 oryginalnego grafu G Dopóki zbiór S jest niepusty: wybierz najmniejszą krawędź ze zbioru S Jeśli krawędź ta łączy 2 różne drzewa w lesie L to dodaj ją do zbioru E 2 Usuń wybraną krawędź ze zbioru S 21
Algorytm Kruskala - zadanie 8 1 12 9 17 5 12 4 13 10 6 22
Algorytmy zachłanne Jeśli problem posiada własność optymalnej podstruktury i można przeprowadzić dowód matematyczny (np. poprzez indukcję matematyczną), że dla dowolnej instancji tego problemu algorytm zachłanny zwraca optymalny wynik, to algorytm zachłanny dla tego problemu jest optymalny Jeśli problem daje się sformułować w kategoriach matroidu, to strategia zachłanna dla tego problemu jest optymalna 23