Dynamické programování

Teorie:

Pomocí dynamického programování řešíme obvykle úlohy s následujícími vlastnostmi:

  1. - celkové řešení lze poskládat z řešení podúloh menšího rozsahu (podobně jako když používáme rekurzi)
  2. - jednotlivé podúlohy se mohou v celkovém řešení opakovat
  3. - platí princip optimality: je-li celkové řešení úlohy složeno z optimálních řešení menších podúloh, je také optimální

Můžeme tedy postupovat tak, že nejdříve optimálně vyřešíme podúlohy a potom z nich sestavíme (optimální) řešení původní úlohy.

Příklad:

Výpočet n-tého Fibonacciho čísla lze řešit rekurzí, nebo pomocí dynamického programování. Tento jednoduchý ilustrativní příklad dynamického programování jsem si vypůjčil zde.

Problém celočíselného batohu

Na cvičení byl formulován problém celočíselného batohu. Pseudokód algoritmu pro řešení tohoto problému ze stránek pana doktora Kryla jsme podrobně rozebrali na tabuli.

Odtrasovali jsme část výpočtu a tím jsme si v praxi vyzkoušeli princip dynamického programování.

Úlohy

V CodExu jsou zadány dvě nové úlohy - každá za 16 bodů.

Samice hrabáče

Dle mého názoru nejkurióznější věc kterou jsme během cvičení "vkládali" do batohu (velikost: 10, cena: 7K). Kurióznější by mohla být snad už jenom britská flotila na manévrech v jižním Pacifiku.