Laboratórium 11 Dynamické programovanie dátových štruktúr a algoritmov (séria 1AB)

Používateľské nástroje

Nástroje webu

Bočný panel

obsah

1 Laboratórne ciele

2 Dynamické programovanie

2.1 Prehľad

Dynamické programovanie spočíva v riešení problému jeho rozdelením na čiastkové problémy a ich riešení. Na rozdiel od divide et impera nie sú podprogramy disjunktné, ale prekrývajú sa.

algoritmov

Aby sa zabránilo prepočtu prekrývajúcich sa častí, robí sa riešenie od najmenších podprogramov a pomocou nášho výsledku vypočítame bezprostredne väčší čiastkový problém. Najmenšie podproblémy sa nazývajú unitárne podproblémy, ktoré je možné vyriešiť v konštantnej zložitosti, napríklad najväčšia postupnosť v súbore jedného prvku.

2.2 Implementácia

2.3 Typické problémy vyriešené týmto algoritmom

2.3.1 Problém s batohom

Riešenie je konštruované dynamickým programovaním, D [i] [j] = najlepšia cena získaná pre prvé objekty i s maximálnou hmotnosťou j.
Vzťah rekurencie je nasledovný: D [i] [j] = maximum (D [i-1] [j], D [i-1] [jG [i]] + C [i]), kde G [i] = váha objektu i a C [i] = cena objektu.
Myšlienka je táto: K súčasnému riešeniu buď nepridávame vôbec objekt i, a zostaneme na cene pre objekty i-1, alebo pridáme objekt i, v takom prípade pripočítame jeho cenu k cene získanej pre prvé objekty i-1 a váhu j-G [i].

2.3.2 Určenie najdlhšieho stúpajúceho radu

Príklad: pre reťazec 24,12,15,8,19 je odpoveďou reťazec 12,15,19.
Začíname tým, že pre každý prvok určíme dĺžku najdlhšieho striktne vzostupného reťazca, ktorý začína prvým prvkom a končí týmto prvkom. Túto hodnotu nazveme najlepšia a rekurzívny vzorec použijeme najlepšie i = 1 + max (najlepšie j), s jn potom môžeme prepísať P (n) = ∏ (Cn, k X k), kde k = 0,1,2, ... n.

Nech koef (P, k) = koeficient X k v polynóme P. Potom môžeme napísať nasledujúce 2 vlastnosti:

Spojenie medzi koeficientmi polynómov typu P (n) môžeme odvodiť, ak napíšeme P (n + 1) = (X + 1) P (n) = X P (n) + P (n).

Ale coef (P (n), k) = C (n, k), takže sme dostali rekurenciu, ktorá používa iba jeden doplnok.

Cvičenia

3. Laboratórne cvičenia (Linux)

Pre toto laboratórium si môžete stiahnuť kostru kódu tu. Stiahnite si archív a rozbaľte ho.

Linux

Môžete použiť nástroj wget na stiahnutie a nástroj na rozbalenie na rozbalenie.