Algoritmizace Dynamické programování

Slides:



Advertisements
Podobné prezentace
Algoritmy zpracování textů II
Advertisements

Normalizace Řada analytiků se mylně domnívá, že pro každý objekt existuje jedno jediné univerzálně použitelné nejlepší řešení bez ohledu na řešený problém.
Stavový prostor. • Existují úlohy, pro které není k dispozici univerzální algoritmus řešení • různé hry • problém batohu, problém obchodního cestujícího.
Dualita úloh lineárního programování a analýza citlivosti
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
10. Dynamické datové struktury
ALGO – Algoritmizace 6. cvičení
Semestrální práce KIV/PT Martin Kales Hana Hůlová.
Dynamické programování Programovací technika pro řešení takových optimalizačních úloh, u nichž platí, že úloha se dá rozložit na menší podúlohy, z jejichž.
Aplikace teorie grafů Základní pojmy teorie grafů
PA081 Programování numerických výpočtů Přednáška 2.
ALGO – Algoritmizace 1. cvičení
Třídění Seminář IVT. Definice uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší.
Teorie čísel Nekonečno
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Genetické algoritmy. V průběhu výpočtu používají náhodné operace. Algoritmus není jednoznačný, může projít více cestami. Nezaručují nalezení řešení.
Algoritmy zpracování textů II
Programování v Pascalu Přednáška 7
ADT Strom.
Medians and Order Statistics Nechť A je množina obsahující n různých prvků: Definice: Statistika i-tého řádu je i-tý nejmenší prvek, tj., minimum = statistika.
Metody řazení s lineární časovou složitostí
FORMALIZACE PROJEKTU DO SÍŤOVÉHO GRAFU
LOGISTICKÉ SYSTÉMY 7/14.
1 Vyhledávání Principy vyhledávání Klasifikace klíče:  Interní klíč – je součástí prohlížených záznamů  Externí klíč – není jeho součástí, je jím např.
Algoritmy a datové struktury
Informatika I 3. přednáška
Jazyk vývojových diagramů
Řadicí algoritmy autor: Tadeáš Berkman.
BRVKA Georg F.B. Riemann ( ). BRVKA Známe různé inverzní procesy (i matematické), integrování je inverzní proces k derivování. Definice: I je.
REDUKCE DAT Díváme-li se na soubory jako na text, pak je tento text redundantní. Redundance vyplývá z:  některé fráze nebo slova se opakují  existuje.
Informatika I 2. přednáška
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
Algoritmy a programovací techniky
Algoritmy vyhledávání a řazení
Stromy.
Algoritmizace a programování Třídící algoritmy - 12
JavaScript Podmínky, cykly a pole.
3. Přednáška posloupnosti
Informatika I 7. přednáška RNDr. Jiří Dvořák, CSc.
Informatika I 8. přednáška RNDr. Jiří Dvořák, CSc.
Vztah bezkontextových jazyků a ZA
Dokumentace informačního systému
STROMY Datová struktura sestávající z uzlů
Jedno-indexový model a určení podílů cenných papírů v portfoliu
1 / 9X36DSA 2005The complexity of different algorithms varies: O(n), Ω(n 2 ), Θ(n·log 2 (n)), … Různé algoritmy mají různou složitost: O(n), Ω(n 2 ), Θ(n·log.
Rozklad problému na podproblémy, rekurze
Kompresní algoritmus LZW Dokumentografické informační systémy.
Rozpoznávání v řetězcích
Grafický zápis algoritmů (vývojové diagramy) Test na trojúhelník (trojúhelníková nerovnost) Maximum ze tří čísel s použitím pomocné proměnné Pravoúhlý.
Gradientní metody Metoda největšího spádu (volný extrém)
hledání zlepšující cesty
Grafický zápis algoritmů (vývojové diagramy) Eratosthenovo síto
Sylabus V rámci PNV budeme řešit konkrétní úlohy a to z následujících oblastí: Nelineární úlohy Řešení nelineárních rovnic Numerická integrace Lineární.
Vyhledávání vzorů (template matching)
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)NP-úplné problémyGRA, LS 2012/13, Lekce 13 1 / 14 NP-ÚPLNÉ.
NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6.
Úvod do databázových systémů
Algoritmizace – základní pojmy
Definiční obor a obor hodnot
Operační výzkum Lineární programování Dopravní úloha nevyrovnaná.
Překladače 5. Syntaktická analýza
ZAL – 3. cvičení 2016.
Rekurze.
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
ALG 07 Selection sort (Select sort) Insertion sort (Insert sort)
Různé algoritmy mají různou složitost
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Definiční obory. Množiny řešení. Intervaly.
Dynamické programování Optimální binární vyhledávací strom
Algoritmizace a datové struktury (14ASD)
Transkript prezentace:

Algoritmizace 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.

Dynamické programování Řeší problémy podobně jako metoda rozděl a panuj (divide-and-conquer) 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ů.

Dynamické programování Popis vývoje algoritmu dynamického programování: Charakterizace struktury optimálního řešení. Nalezení rekurzivní definice pro výpočet hodnoty optimálního řešení. Nalezení výpočtu hodnoty optimálního řešení zdola nahoru (od nejjednodušších podproblémů ke složitějším). 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í).

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 = 〈x1, x2, ..., xm〉. Řetězec Z = 〈z1, z2, ..., zk〉 je podposloupnost X pokud existuje rostoucí posloupnost indexů 〈i1,i2, ..., ik〉 z X taková, že pro všechny j = 1, 2, ..., k, platí xij = zj . 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.

Příklad: Nejdelší společná podposloupnost 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 2m. 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 = 〈x1, x2, ..., xm〉 a Y = 〈y1, y2, ..., yn〉 a hledanou výstupní podposloupnost Z = 〈z1, z2, ..., zk〉platí: Pokud xm = yn, potom zk = xm = yn a Zk-1 je NSP Xm-1 a Yn-1. Pokud xm ≠ yn, potom zk ≠ xm implikuje, že Z je NSP Xm-1 a Y. Pokud xm ≠ yn, potom zk ≠ yn implikuje, že Z je NSP X a Yn-1.

Příklad: Nejdelší společná podposloupnost 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ů Xi a Yj. Z předchozí analýzy si můžeme pole c definovat rekurzivně:

Příklad: Nejdelší společná podposloupnost Nalezení výpočtu hodnoty optimálního řešení zdola nahoru. Function DÉLKA-NSP(X, Y) m ← length[X]; n ← length[Y]; for i ← 1 to m do c[i, 0] ← 0; for j ← 0 to n do c[0, j] ← 0; for j ← 1 to n do if xi = yj then { c[i, j] ← c[i - 1, j - 1] + 1; b[i, j] ← "↖"; } else if c[i - 1, j] ≥ c[i, j - 1]; then { c[i, j] ← c[i - 1, j]; b[i, j] ← "↑"; } else { c[i, j] ← c[i, j - 1]; b[i, j] ← "←"; } return c and b;

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

Příklad: Nejdelší společná podposloupnost Asymptotická složitost algoritmu: Časová: Θ(mn) + O(m+n) = Θ(mn) Paměťová: Θ(mn) Možná vylepšení: 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.)

Příklad: Optimální vyhledávací strom Motivace: 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ěly 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 = 〈k1, k2, ..., kn〉 (tak, že k1 < k2 < ··· < kn), ke každému klíči ki známe pravděpodobnost výskytu pi , navíc máme seznam prázdných klíčů d0, d1, d2, ..., dn , které reprezentují intervaly mezi klíči, které nejsou ve slovníku K, ke každému prázdnému klíči dj známe pravděpodobnost výskytu qi . Navíc platí

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

Příklad: Optimální vyhledávací strom Charakterizace struktury optimálního řešení. 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í.

Příklad: Optimální vyhledávací strom Nalezení rekurzivní definice pro výpočet hodnoty optimálního řešení. Chceme umět řešit podúlohu pro klíče ki, ..., kj, kde i ≥ 1, j ≤ n a j ≥ i - 1. (Pokud j = i – 1, potom použijeme prázdný klíč di-1.). Očekávanou cenu vyhledávání ve stromu e si definujeme rekuzivně w(i,j) je pravděpodobnost výskytu podstromu i,j. tedy

Příklad: Optimální vyhledávací strom Nalezení výpočtu hodnoty optimálního řešení zdola nahoru. Function OPTIMÁLNÍ-BVS(p, q, n) for i ← 1 to n + 1 do { e[i, i - 1] ← qi-1 ; w[i, i - 1] ← qi-1 ; } for l ← 1 to n do for i ← 1 to n - l + 1 do { j ← i + l - 1 ; e[i, j] ← ∞ ; w[i, j] ← w[i, j - 1] + pj + qj ; for r ← i to j do { t ← e[i, r - 1] + e[r + 1, j] + w[i, j] ; if t < e[i, j] then { e[i, j] ← t ; root[i, j] ← r ; } } } return e and root

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