You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dan je niz $S = a_1 a_2 \dots a_n$, kjer so $a_i$ ($1 \le i \le n$) elementi neke končne abecede. Nizu $a_j a_{j+1} \dots a_k$, kjer je $1 \le j \le k \le n$, pravimo strnjen podniz niza $S$. S pomočjo dinamičnega programiranja napiši algoritem, ki določi najdaljši palindromski strnjen podniz v $S$.
Napiši algoritem, ki reši opisani problem. Oceni tudi njegovo časovno zahtevnost v odvisnosti od $m$ in $n$.
$$
\begin{aligned}
v_{hij} &\dots \text{največja vsota elementov od vrstic $h+1$ do $i$ z zadnjim stolpcem $j$} \\
c_{hij} &\dots \text{vsota števil od vrstic $h+1$ do $i$ v $j$-tem stolpcu} \\
s_{ij} &\dots \text{vsota števil do $i$-te vrstice v $j$-tem stolpcu} \[1ex]
s_{0j} &= 0 \\
s_{ij} &= s_{i-1, j} + a_{ij} \quad (i > 0) \[1ex]
c_{hij} &= s_{ij} - s_{hj} \[1ex]
v_{hi0} &= 0 \\
v_{hij} &= s_{ij} - s_{hj} + \max{v_{h,i,j-1}, 0} \[1ex]
v^* &= \max{v_{hij} \mid 0 \le h \le i \le m, 0 \le j \le n}
\end{aligned}
$$
Vrstni red računanja: $s_{ij}$ naraščajoče po $i$, $j$; $v_{hij}$ naraščajoče po $h \le i$, $j$
Časovna zahtevnost: $O(mn) + O(m^2 n) = O(m^2 n)$
Naloga 3
Na ulici je $n$ vrstnih hiš, pri čemer je v $i$-ti hiši $c_i$ denarja. Tat se odloča, katere izmed hiš naj oropa. Vsak oropan stanovalec to sporoči svojim sosedom, zato tat ne sme oropati dveh sosednjih hiš. Ker je tat poslušal predmet Operacijske raziskave, pozna dinamično programiranje. Pokaži, kako naj tat določi, katere hiše naj oropa.
Imamo hlod dolžine $\ell$, ki bi ga radi razžagali na $n$ označenih mestih $0 < x_1 < x_2 < \dots < x_n < \ell$. Eno rezanje stane toliko, kolikor je dolžina hloda, ki ga režemo. Ko hlod prerežemo, dobimo dva manjša hloda, ki ju režemo naprej. Poiskati želimo zaporedje rezanj z najmanjšo ceno.
Reši problem pri podatkih $\ell = 10$ in $(x)_{i=1}^4 = (3, 5, 7, 8)$.
S pomočjo dinamičnega programiranja reši problem v splošnem. Oceni tudi njegovo časovno zahtevnost.
Na voljo imamo kovance z vrednostmi $1 = v_1 < v_2 < \cdots < v_n$ in vsoto $C$, ki jo želimo izplačati s kovanci. Predpostavljamo, da imamo dovolj velik nabor kovancev.
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.
Naloga 6
Imamo zaporedje $n$ polj, pri čemer je na $i$-tem polju zapisano število $a_i$. Na voljo imamo še $\lfloor n/2 \rfloor$ domin, z vsako od katerih lahko pokrijemo dve sosednji polji. Vsaka domina je sestavljena iz dveh delov: na enem je znak $+$, na drugem pa znak $-$. Posamezno polje lahko pokrijemo z le eno domino; če sta pokriti dve sosednji polji, morata biti pokriti z različnima znakoma (bodisi z iste, bodisi z druge domine). Iščemo tako postavitev domin, ki maksimizira vsoto pokritih števil, pomnoženih z znakom na delu domine, ki pokriva število. Pri tem ni potrebno, da uporabimo vse domine.
Primer dopustnega (ne nujno optimalnega) pokritja:
[+
-]
[-
+]
[-
+]
6
3
-4
2
-3
5
9
1
2
Vsota tega pokritja je $3 - (-4) - 5 + 9 - 1 + 2 = 12$. Če bi eno od zadnjih dveh domin obrnili (zamenjala bi se znaka), dobljeno pokritje ne bi bilo dopustno, saj bi dve zaporedni polji bili pokriti z enakima znakoma.
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.