Dynamické programování. 10.3.2005 UIN009 Efektivní algoritmy 1
Srovnání metody rozděl a panuj a dynamického programování Rozděl a panuj: top-down Dynamické programování: bottom-up Rozděl a panuj: překrývání podproblémů Dynamické programování: opakovaným výpočtům se vyhneme udržováním tabulky již vypočtených hodnot. Protože předem nevíme, které podproblémy budeme potřebovat, vyřešíme všechny. Bellmanův princip optimality: Optimální řešení problému obsahuje optimální řešení podproblému. 10.3.2005 UIN009 Efektivní algoritmy 2
Formální popis algoritmu dynamického programování R. Bellman: Dynamic programming (1957) Řízený proces P = (P, {Q(p) p P},T), kde P je množina stavů Q(p) je množina přípustných řízení ze stavu p P T : p Q p je přechodová funkce U p P ({} ( )) P Nechť p 1 P je počáteční stav. Posloupnost (q 1 ) splňující q 1 Q(p 1 ), q 2 Q(T(p 1 )),..., q n Q(T(p n-1,q n-1 )) se nazývá strategie délky n z p 1. Posloupnost (p 1,...,p n+1 ), kde p 2 T(p 1 ),..., p n+1 T(p n,q n ), nazveme průběhem procesu při strategii (q 1 ) z počátečního stavu p 1. 10.3.2005 UIN009 Efektivní algoritmy 3
Problém Mějme účelovou funkci F(p 1,..., p n ). Problém: Nalezení optimální strategie = strategie (q 1 ) délky n ze stavu p 1, která maximalizuje (minimalizuje) F(p 1,..., p n ). Předpoklad: F(p 1,..., p n )= f 1 (p 1 )+...+f n (p n,q n ) 10.3.2005 UIN009 Efektivní algoritmy 4
Bellmanův princip optimality Nechť (q 1 ) je optimální strategie procesu P ze stavu p 1 s účelovou funkcí f 1 (p 1 )+...+f n (p n,q n ). Pak pro libovolné 1< i n je (q i,q i+1 ) optimální strategie procesu P ze stavu p i s účelovou funkcí f i (p i,q i )+...+f n (p n,q n ). optimální strategie q p 1 q 1 p 2 q i-1 q 2 p i q q... i p i+1 n i+1... p n+1 optimální strategie 10.3.2005 UIN009 Efektivní algoritmy 5
Návrh algoritmu Φ k (p) := f n-k+1 (p,q n-k+1 )+...+f n (p n,q n ), kde (q n-k+1 ) je optimální strategie délky k ze stavu p. Rekurentní vztah pro výpočet Φ : Φ 1 (p) = max {f n (p,q) q Q(p)} Φ k+1 (p) = max {f n-k (p,q) + Φ k (T(p,q)) q Q(p)} p optimální strategie délky k 10.3.2005 UIN009 Efektivní algoritmy 6
Algoritmus Postupně počítej Φ 1 (p), ϕ 1 (p), p P Φ 2 (p), ϕ 2 (p), p P... Φ n (p), ϕ n (p), p P kde ϕ i (p) je ta hodnota z Q(p), v níž příslušné maximum nastává. Optimální řízení je (ϕ n (p 1 ), ϕ n-1 (p 2 ),..., ϕ 1 (p n )), kde p 2 =T(p 1, ϕ n (p 1 )),..., p n =T(p n-1, ϕ 2 (p n-1 )). Hodnota účelové funkce při optimální strategii je Φ n (p 1 ). 10.3.2005 UIN009 Efektivní algoritmy 7
Příklady optimální uzávorkování součinu matic minimální triangulace konvexního mnohoúhelníka určení nejdelší společné podposloupnosti optimální vyhledávací stromy P.Töpfer: Algoritmy a programovací techniky. Prometheus, Praha 1995. 10.3.2005 UIN009 Efektivní algoritmy 8
Problémy Srovnejte řešení problému batohu algoritmem dynamického programování a hladovým algoritmem. Nalezne hladový algoritmus vždy optimální řešení? Co když jsou předměty dělitelné? Nechť u,v Σ*. Navrhněte algoritmus, který metodou dynamického programování zjistí minimální počet operací, pomocí nichž lze převést u na v. Povoleny jdou operace vymazání znaku vložení znaku změna znaku Analyzujte složitost vašeho algoritmu. Vstupní text, sestávající z n slov o délkách l 1,..,l n znaků je třeba vytisknout na jistý počet řádků, každý o délce M znaků. Pokud řádek obsahuje slova i až j a mezi dvěma sousedními slovy je vždy jedna mezera, pak počet mezer na j konci řádku je M j + i = l. Navrhněte algoritmus dynamického k i k programování, který vytiskne odstavec n slov tak, aby byl minimalizován součet třetích mocnin počtu nadbytečných mezer na konci všech řádků kromě posledního. 10.3.2005 UIN009 Efektivní algoritmy 9
Další problémy Vpůjčovně sportovních potřeb mají m párů lyží, i-té lyže o délce d i, které si chce vypůjčit n lyžařů, i-tý lyžař má výšku v i. Každý lyžař touží po lyžích, jejichž délka je co nejblíže jeho výšce. Navrhněte efektivní algoritmus, který přiřadí lyže lyžařům tak, aby součet absolutních hodnot rozdílů výšky každého lyžaře a délky jeho lyží byl minimalizován. Uvažte 2 varianty: n = m n m Kterou variantu je vhodné řešit algoritmem dynamického programování a kterou hladovým algoritmem? Je dáno n N, konečná abeceda Σ, pro každý znak z Σ jeho pravdě-podobnost p(z) (0,1). Navrhněte algoritmus, který navrhne rozmístění znaků na n tlačítek klávesnice mobilního telefonu tak, aby střední hodno-ta počtu stisků tlačítek při psaní textové zprávy byla minimalizována. Uvažte 2 varianty: Pořadí znaků abecedy je předem dáno Pořadí znaků abecedy lze měnit Kterou variantu je vhodné řešit algoritmem dynamického programování a kterou hladovým algoritmem? 10.3.2005 UIN009 Efektivní algoritmy 10