| tags | vaje, or, dinamicno programiranje |
|---|---|
| hackmd | https://hackmd.io/JnhxM8IfTaSFzMCVnKbo-A |
| plugins | mathjax, mermaid |
Dan je niz
-
${p_{jk}}$ ... ali je strnjen podniz${a_j} {a_{j+1}} \dots {a_k}$ palindrom -
${p_{j,j-1}} = 1$ ($1 \le j \le n+1$ ) -
${p_{jj}} = 1$ ($1 \le j \le n$ ) -
${p_{jk}} = {p_{j+1,k-1}} \land {a_j} = {a_k}$ ($1 \le j < k \le n$ ) - računamo v leksikografskem vrstnem redu po
$(k-j, j)$ - dolžina najdaljšega strnjenega podniza
$p^* = \max \lbrace k-j+1 \mid 1 \le j \le k \le n, {p_{jk}} = 1 \rbrace$ - časovna zahtevnost:
$O(n^2)$ - obstaja tudi algoritem, ki teče v času
$O(n)$
Dana je matrika
-
Reši problem za matriko
$$ A = \begin{pmatrix} 1 & -1 & 2 & 4 \ -3 & -2 & 8 & 2 \ -3 & 2 & -2 & 4 \ 1 & -5 & -1 & -2 \end{pmatrix} . $$
-
Napiši rekurzivne enačbe za opisani problem.
-
Napiši algoritem, ki reši opisani problem. Oceni tudi njegovo časovno zahtevnost v odvisnosti od
$m$ in$n$ .
-
${p_{hij}}$ ... največja vsota komponent podmatrike z vrsticami od$h+1$ do$i$ in zadnjim stolpcem$j$ -
${v_{ij}}$ ... vsota komponent do$i$ -te vrstice v$j$ -tem stolpcu -
${v_{0j}} = 0$ ($1 \le j \le n$ ) -
${v_{ij}} = {v_{i-1,j}} + {a_{ij}}$ ($1 \le i \le m$ ,$1 \le j \le n$ ) -
${p_{hi0}} = 0$ ($0 \le h < i \le m$ ) -
${p_{hij}} = {v_{ij}} - {v_{hj}} + \max \lbrace {p_{h,i,j-1}}, 0 \rbrace$ ($0 \le h < i \le m$ ,$1 \le j \le n$ ) - najprej izračunamo vrednosti
${v_{ij}}$ v leksikografskem vrstnem redu glede na$(i, j)$ - nato izračunamo vrednosti
${p_{hij}}$ v leksikografskem vrstnem redu glede na$(h, i, j)$ - največjo vsoto strnjene podmatrike dobimo kot
$p^* = \max \lbrace {p_{hij}} \mid 0 \le h < i \le m, 0 \le j \le n \rbrace$
Na ulici je
-
${p_i}$ ... največja količina, ki jo lahko naropa v prvih$i$ hišah ${p_0} = 0$ ${p_1} = \max \lbrace {c_1}, 0 \rbrace$ -
${p_i} = \max \lbrace {p_{i-1}}, {c_i} + {p_{i-2}} \rbrace$ ($2 \le i \le n$ ) - računamo naraščajoče po indeksu
$i$ - maksimalna količina
$p^* = {p_n}$
Imamo hlod dolžine
- Reši problem pri podatkih
$\ell = 10$ in$(x_i)_{i=1}^4 = (3, 5, 7, 8)$ . - S pomočjo dinamičnega programiranja reši problem v splošnem. Oceni tudi njegovo časovno zahtevnost.
-
${p_{ij}}$ ... najmanjša cena rezanja hloda od${x_i}$ do${x_{j+1}}$ -
${x_0} = 0$ ,${x_{n+1}} = \ell$ -
${p_{ii}} = 0$ ($0 \le i \le n$ ) -
${p_{ij}} = {x_{j+1}} - {x_i} + \min \lbrace {p_{i,h-1}} + {p_{hj}} \mid i+1 \le h \le j \rbrace$ ($0 \le i < j \le n$ ) - računamo leksikografsko po
$(j-i, i)$ - najmanjša skupna cena rezanja
$p^* = {p_{0n}}$ - časovna zahtevnost:
$O(n^3)$
graph TD
04[0 - 10: 23] --- 01[0 - 5: 5]
04 --- 24[5 - 10: 8]
01 --- 00[0 - 3]
01 --- 11[3 - 5]
24 --- 23[5 - 8: 3]
24 --- 44[8 - 10]
23 --- 22[5 - 7]
23 --- 33[7 - 8]
Na voljo imamo kovance z vrednostmi
- Poišči izplačilo z najmanjšim številom kovancev
za
$C = 25$ ,$n = 4$ in$(v_i)_{i=1}^n = (1, 2, 5, 7)$ . - S pomočjo dinamičnega programiranja reši problem v splošnem.
Imamo zaporedje
Primer dopustnega (ne nujno optimalnega) pokritja:
| [+ | -] | [- | +] | [- | +] | |||
|---|---|---|---|---|---|---|---|---|
| 6 | 3 | -4 | 2 | -3 | 5 | 9 | 1 | 2 |
Vsota tega pokritja je
-
Zapiši rekurzivne enačbe za reševanje danega problema. Razloži, kaj predstavljajo spremenljivke, v kakšnem vrstnem redu jih računamo, ter kako dobimo optimalno rešitev.
Namig: posebej obravnavaj dva primera glede na postavitev zadnje domine.
-
Oceni časovno zahtevnost algoritma, ki sledi iz zgoraj zapisanih enačb.
-
S svojim algoritmom poišči optimalno pokritje za zgornji primer.