Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Podobné dokumenty
Dynamické programování

Binární vyhledávací stromy pokročilé partie

Dynamické programování. Optimální binární vyhledávací strom

Návrh Designu: Radek Mařík

5. Dynamické programování

Binární soubory (datové, typované)

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Časová a prostorová složitost algoritmů

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

R zné algoritmy mají r znou složitost

Prohledávání do šířky = algoritmus vlny

Dynamické programování UIN009 Efektivní algoritmy 1

Rekurzivní algoritmy

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

NPRG030 Programování I, 2018/19 1 / :03:07

Dynamické programování

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Dynamické programování

Dynamické programování

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

12. Globální metody MI-PAA

Základy algoritmizace. Pattern matching

a) b) c) Radek Mařík

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41

Datové struktury 2: Rozptylovací tabulky

Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmizace prostorových úloh

Základy algoritmizace a programování

Stromy, haldy, prioritní fronty

IB111 Úvod do programování skrze Python

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Algoritmy výpočetní geometrie

Algoritmy a datové struktury

Tato tematika je zpracována v Záznamy přednášek: str

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY

Základní datové struktury III: Stromy, haldy

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Rozklad problému na podproblémy

Algoritmy I, složitost

DYNAMICKÉ PROGRAMOVÁNÍ A PROBLÉM BATOHU

Metodický koncept k efektivní podpoře klíčových odborných kompetencí s využitím cizího jazyka ATCZ62 - CLIL jako výuková strategie na vysoké škole

Na začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

f(x,y) = max ( f(x 1, y 1)+ f(x 1,y) ) + f(x,y 1) +1 jinak f(x,y,z) = f(x 1, y 1, z 1)+ f(x 1,y,z) + f(x,y 1,z) + f(x,y,z 1)+1 jinak

Algoritmus pro hledání nejkratší cesty orientovaným grafem

5 Rekurze a zásobník. Rekurzivní volání metody

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Elegantní algoritmus pro konstrukci sufixových polí

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Zadání druhého zápočtového projektu Základy algoritmizace, 2005

Složitosti základních operací B + stromu

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Obsah Techniky návrhu algoritmů Rekurze, algoritmy prohledávání s návratem, dynamické programování Rekurze... 5

Algoritmizace Hashing II. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

ALGORITMY A DATOVÉ STRUKTURY

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Vyhledávání v textu. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Implementace LL(1) překladů

Digitální učební materiál

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Předmět: Algoritmizace praktické aplikace

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Digitální učební materiál

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Algoritmizace a programování

Stromy. Jan Hnilica Počítačové modelování 14

13. Třídící algoritmy a násobení matic

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Návrh designu: Radek Mařík

Základní datové struktury

Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj

Dynamické programování

Binární vyhledávací stromy

Suffixové stromy. Osnova:

Časová složitost algoritmů, řazení a vyhledávání

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

II. Úlohy na vložené cykly a podprogramy

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

Rzné algoritmy mají rznou složitost

Dynamické programování

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Red Black strom (Red Black Tree) Úvod do programování. Rotace. Red Black strom. Rotace. Rotace

Lokální definice (1) plocha-kruhu

57. ročník Matematické olympiády 2007/2008

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.

Transkript:

Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu problému, ale měly menší velikost. Panuj (Conquer): Rekurzivně vyřeš tyto podproblémy. Jestliže je podproblém dostatečně malý, vyřeš ho přímo (bez rekurze). Kombinuj (Combine): Zkombinuj řešení podproblémů do řešení výsledného původního problému. 2 / 16

Dynamické programování Řeší problémy podobně jako metoda rozděl a panuj (divide-andconquer) kombinováním řešení podproblémů. Slovo programování zde neznamená psaní kódu, ale použití určité metody pro řešení (podobně jako lineární programování, atd). Metoda rozděl a panuj typicky dělí problém rekurzivně na nezávislé podproblémy. Naproti tomu dynamické programování se používá tam, kde podproblémy nejsou nezávislé (tj. podproblémy sdílejí společné podpodproblémy). Metoda rozděl a panuj by v takovém případě opakovaně řešila stejné společné podpodproblémy, čímž by vykonávala zbytečnou práci navíc. Dynamické programování řeší každý podpodproblém pouze jednou a jeho řešení si pamatuje v tabulce. Tím zamezí opakovanému řešení stejných podproblémů. 3 / 16

Dynamické programování Popis vývoje algoritmu dynamického programování: 1) Charakterizace struktury optimálního řešení. 2) Nalezení rekurzivní definice pro výpočet hodnoty optimálního řešení. 3) Nalezení výpočtu hodnoty optimálního řešení zdola nahoru (od nejjednodušších podproblémů ke složitějším). 4) Nalezení konstrukce optimálního řešení z vypočtených informací (tento krok může být vynechán pokud je hodnota optimálního řešení přímo vlastní optimální řešení). 4 / 16

Příklad: Nejdelší společná podposloupnost Motivace V biologických aplikacích chceme často porovnávat řetězce DNA různých organizmů a zjišťovat jejich podobnost. Řetězec DNA je posloupnost nukleotidů, kde nukleotid je buď (adenine A, guanine G, cytosine C, thymine T). Podobnost dvou řetězců DNA určuje délka jejich nejdelší společné podposloupnosti (dále už jen NSP). Podposloupnost je společná několika řetězcům, pokud je podposloupností každého řetězce jednotlivě. Mějme řetězec X = x 1, x 2,..., x m. Řetězec Z = z 1, z 2,..., z k je podposloupnost X pokud existuje rostoucí posloupnost indexů i 1,i 2,..., i k z X taková, že pro všechny j = 1, 2,..., k, platí x i j = z j. Příklad: Z = G, C, T, G je podposloupnost X = A, G, C, G, T, A, G s korespondující posloupností indexů 2, 3, 5, 7. Úloha: Najděte nejdelší společnou podposloupnost pro dva zadané řetězce DNA. 5 / 16

Příklad: Nejdelší společná podposloupnost 1) Charakterizace struktury optimálního řešení. Pokud bychom chtěli najít podposloupnost hrubou silou. To znamená otestovat všechny podmnožiny indexů {1, 2,, m} menšího ze vstupních řetězců DNA (m je jeho délka). Takových podmnožin je ale 2 m. Složitost tohoto přístupu by tedy byla exponenciální. Pro reálné DNA řetězce s alespoň tisícovkami nukleotidů by tedy byla tato metoda zcela nepoužitelná. Při detailnější analýze problému snadno zjistíme, že pro dva vstupní řetězce X = x 1, x 2,..., x m a Y = y 1, y 2,..., y n a hledanou výstupní podposloupnost Z = z 1, z 2,..., z k platí: Pokud x m = y n, potom z k = x m = y n a Z k-1 je NSP X m-1 a Y n-1. Pokud x m y n, potom z k x m implikuje, že Z je NSP X m-1 a Y. Pokud x m y n, potom z k y n implikuje, že Z je NSP X a Y n-1. 6 / 16

Příklad: Nejdelší společná podposloupnost 2) Nalezení rekurzivní definice pro výpočet hodnoty optimálního řešení. Z předchozí analýzy vyplývá, že musíme umět řešit podúlohu pro postupně se odzadu zkracující vstupní řetězce. Nyní zavedeme pole c[i,j] jako délku NSP pro prefixy vstupních řetězců X i a Y j. Z předchozí analýzy si můžeme pole c definovat rekurzivně: c i, j = 0 pokud i = 0 nebo j = 0, c i 1, j 1 + 1 pokud i, j > 0 a x i = y j, max c i, j 1, c i 1, j pokud i, j > 0 a x i y j. 7 / 16

Příklad: Nejdelší společná podposloupnost 3) Nalezení výpočtu hodnoty optimálního řešení zdola nahoru. Function DÉLKA-NSP(X, Y) 1) m length[x]; 2) n length[y]; 3) for i 1 to m do 4) c[i, 0] 0; 5) for j 0 to n do 6) c[0, j] 0; 7) for i 1 to m do 8) for j 1 to n do 9) if x i = y j 10) then { c[i, j] c[i - 1, j - 1] + 1; 11) b[i, j] " "; } 12) else if c[i - 1, j] c[i, j - 1]; 13) then { c[i, j] c[i - 1, j]; 14) b[i, j] " "; } 15) else { c[i, j] c[i, j - 1]; 16) b[i, j] " "; } 17) return c and b; 8 / 16

Příklad: Nejdelší společná podposloupnost 4) Nalezení konstrukce optimálního řešení z vypočtených informací. Procedure TISK-NSP(b, X, i, j) 1) if (i = 0) or (j = 0) then exit; 2) if b[i, j] = " " then { TISK-NSP(b, X, i - 1, j - 1); 3) print x i ; } 4) else if b[i, j] = " " then TISK-NSP(b, X, i - 1, j); 5) else TISK-NSP(b, X, i, j - 1); 9 / 16

Příklad: Nejdelší společná podposloupnost Asymptotická složitost algoritmu: Časová: Θ(mn) + O(m+n) = Θ(mn) Paměťová: Možná vylepšení: Θ(mn) Pomocné pole b lze nahradit testem v poli c v konstantním čase. Nepotřebujeme celé pole c, ale pouze stačí v paměti udržovat předposlední a poslední řádek a sloupec. (Pak ale nebudeme schopni v čase O(m+n) rekonstruovat hledanou podposloupnost.) 10 / 16

Motivace: Příklad: Optimální vyhledávací strom Máme vytvořit překlad textu (posloupnosti slov) z angličtiny do češtiny. Přitom víme, že jak se jednotlivá anglická slova často v textu vyskytují. Kdybychom sestavili pouze obyčejný vyhledávací strom s hloubkou O(log n), mohlo by se stát, že slovo jako "mycophagist s velmi malou pravděpodobností výskytu by se dostalo do kořene takového stromu. Naopak slova s vysokou pravděpodobností výskytu jako the by měli být blízko u kořene. Úloha: Sestavte optimální binární vyhledávací strom (BVS), když je dána množina klíčů K = k 1, k 2,..., k n (tak, že k 1 < k 2 < < k n ), ke každému klíči k i známe pravděpodobnost výskytu p i, navíc máme seznam prázdných klíčů d 0, d 1, d 2,..., d n, které reprezentují intervaly mezi klíči, které nejsou ve slovníku K, ke každému prázdnému klíči d j známe pravděpodobnost výskytu q i. Navíc platí 11 / 16

Příklad: Optimální vyhledávací strom Příklad dvou vyhledávacích stromů s pěti klíči. 12 / 16

Příklad: Optimální vyhledávací strom 1) Charakterizace struktury optimálního řešení. n n celková cena vyhledávání v T = hloubka T k i + 1 p i + hloubka T d i + 1 q i i=1 i=0 n n = 1 + hloubka T k i p i + hloubka T d i q i i=1 i=0 Hledáme binární vyhledávací strom jehož celková cena vyhledávání (tj. cena přes všechny dotazy na úspěšné i neúspěšné vyhledání slova) bude minimální. 13 / 16

Příklad: Optimální vyhledávací strom 2) Nalezení rekurzivní definice pro výpočet hodnoty optimálního řešení. Chceme umět řešit podúlohu pro klíče k i,..., k j, kde i 1, j n a j i - 1. (Pokud j = i 1, potom použijeme prázdný klíč d i-1.). Očekávanou cenu vyhledávání ve stromu e si definujeme rekuzivně e i, j = q i 1 pokud j = i 1, min i r j e i, r 1 + e r + 1, j + w(i, j) pokud i j. w(i, j) = q i 1 pokud j = i 1, w(i, j 1) + p j + q j pokud i j. w(i,j) je pravděpodobnost výskytu podstromu i,j. tedy 14 / 16

Příklad: Optimální vyhledávací strom 3) Nalezení výpočtu hodnoty optimálního řešení zdola nahoru. Function OPTIMÁLNÍ-BVS(p, q, n) 1) for i 1 to n + 1 do { 2) e[i, i - 1] q i-1 ; 3) w[i, i - 1] q i-1 ; } 4) for l 1 to n do 5) for i 1 to n - l + 1 do { 6) j i + l - 1 ; 7) e[i, j] ; 8) w[i, j] w[i, j - 1] + p j + q j ; 9) for r i to j do { 10) t e[i, r - 1] + e[r + 1, j] + w[i, j] ; 11) if t < e[i, j] 12) then { e[i, j] t ; 13) root[i, j] r ; } } } 14) return e and root 15 / 16

Příklad: Optimální vyhledávací strom Asymptotická složitost algoritmu: Časová: O(n 3 ) a dokonce Ω(n 3 ) => Θ(n 3 ) Paměťová: Θ(n 2 ) 16 / 16