Documente Academic
Documente Profesional
Documente Cultură
probleme de optim
definirea subproblemei (stare) si asocierea functii obiectiv
pentru subproblema
definirea unei relatii de tranzitie intre stari (decizie)
politica = secventa de decizii
aplicarea Principiului de Optim pentru obtine relatia de
recurenta
Principiul de Optim (PO): o subpolitica a unei politici
optimale este la rindul ei optimala
calculul recurentei rezolvind subproblemele de la mic la
mare si memorind valorile date de relatia de recurenta
intr-un tablou
extragerea solutiei optime din tablou
Exemplu: retea triunghiulara de numere: modelare
a0
a1 a2
a3 a4 a5
a6 a7 a8 a9
functia obiectiv: maxdD lg(d)
stare: DMR(i) = subreteaua cu virful in ai
val. asociata: i
functia asociata: f(i) = maxdD(i) lg(d)
decizii posibile: DMR(i) DMR(stg(i)),
DMR(i) DMR(drp(i))
recurenta obtinuta: f(i) = max(f(stg(i)), f(drp(i))) + ai
Exemplu: retea triunghiulara de puncte: implementare
c[2,0]
c[2,1] c[3,2]
c[1,0]
Intrare:
Digraf etajat G = (V, A),
• V = V1 V2 … Vp Vp+1
• Vi Vj = Ø
• V1 = {s}. Vp+1 = {t}
• daca un arc are sursa in Vi atunci are destinatia in Vi+1
functie de profit c : A R
Iesire: un drum de la s la t de profit maxim
Alocarea resurselor
XV
stare: DODE(j) = problema determinarii drumurilor de la j la t
V = {0, 1, …, n-1}
D[i,j] = drumul optim la j Vi la t
ValOpt[i,j] valoarea acestui drum
decizie: DODE(j) DODE(k)
aplicam PO si obtinem
ValOpt[i, j] = c[j, k] + ValOpt[i+1, k]
de unde rezulta recurenta:
ValOpt[p+1, n-1] = 0
ValOpt[i, j] = optim{c[j, k] + ValOpt[i+1, k] | k Vi+1, (j,k) A}
ordinea de rezolvare a subproblemelor:
DODE(Vp+1), DODE(VpVp+1), …, DODE(V)
Alocarea resurselor
Problema
instanta:
• D = (V, A, lg), lg : A R
• lg[i, i] = 0, lg[i, j] = daca (i,j) A
• lungime drum = lungimilor arcelor de pe drum
iesire:
• pentru orice pereche (i,j) lungimea celui mai scurt drum de
la i la j
Modelul matematic
stare: DMD(X) – drumuri minime cu virfuri intermediare in X
• functia asociata: LX[i, j] = lung. drumului minim de la i la j
cu virfuri intermediare in X
Drumuri minime intr-un digraf (continuare)
instanta:
n obiecte 0, 1, ..., n-1 de dimensiuni (greutati) w0, w1, ..., wn-1
un rucsac de capacitate M
un obiect i poate fi introdus in rucsac complet (xi = 1) sau de loc
(xi=0)
introducerea in rucsac a obiectului i aduce un profit pi
profitul total adus de alegerile x0, ..., xn-1 este i=0,n-1 xipi
iesire:
o alegere pentru care profitul adus este maxim
Problema rucsacului (varianta discreta): solutie
modelul matematic
stare: RUCSAC(j, X)
• functia obiectiv:
max i=0,j-1 xipi
• restrictii:
(i)xi {0,1}
i=0,j-1 xiwi X
X Z, (i)wi ,pi Z
functia asociata unei stari: fj(X) = max i=0,j-1 xipi
Problema rucsacului (varianta discreta): solutie (cont)
X 0,
f j ( X ) 0 X 0 j 0,
max( f ( X ), f ( X w ) p ) altfel.
j 1 j 1 j 1 j 1
Problema rucsacului (varianta discreta): exemplu
X 0 1 2 3 4 5 6 7 8 9 10
f0(X) 0 0 0 0 0 0 0 0 0 0 0
f1(X) 0 0 0 10 10 10 10 10 10 10 10
f2(X) 0 0 0 10 10 30 30 30 40 40 40
f3(X) 0 0 0 10 10 30 30 30 40 40 40
x2 = 0 x1 = 1 x0 = 1
Problema rucsacului (varianta discreta): functiile fi
relatia de recurenta
d[0, j] = j, d[i, 0] = i (i, j)
d[i, j] = min{d[i-1, j] + 1, d[i-1, j-1] + [i, j], d[i, j-1] + 1}
[i, j] = if (a[i] = b[j]) then 0 else 1
timp:
calculului matricii d: O(n2)
determinarea secventei de operatii: O(n)
spatiu: O(n2)
Distanta intre siruri - exemplu
c a m a r a
0 1 2 3 4 5 6
a 1 1 1 2 3 4 5
r 2 2 2 2 3 3 4
m 3 3 3 2 3 4 4
a 4 4 3 3 2 3 4
t 5 5 4 4 3 3 4
a 6 6 5 5 4 4 3
alte operatii:
transpozitia: schimba ordinea a doua caractere adiacente
distanta Levenshtein (de editare)
sunt admise numai inserari, stergeri si inlocuiri
toate operatiile au costul 1
distanta Hamming
sunt admise numai inlocuirile
costul operatiei este 1
este finita ori de cate ori |a| = |b|
distanta “episodica” (episode distance)
sunt admise numai inserari
costul operatiei este 1
distanta este sau |b|-|a| sau
Distanta intre siruri - variatii
s u r g e r y
0 0 0 0 0 0 0 0
s 1 0 1 1 1 1 1 1
u 2 1 0 1 2 2 2 2
r 3 2 1 0 1 2 2 3
v 4 3 2 1 1 2 3 3
e 5 4 3 2 2 1 2 3
y 6 5 4 3 3 2 2 2
Paralelizare
instanta
o secventa de numere intregi a = (a1, a2, …, an)
stergand cateva elemente din a se obtine o subsecventa
o subsecventa pastreaza ordinea relativa a elementelor
exemplu:
• a = (9, 3, 15, 12, 7, 4, 13, 6, 8)
• subsecventa: (3, 12, 7, 6)
• subsecventa crescatoare: ( 3, 7, 13)
iesire: subsecventa crescatoare de lungime maxima
exemplu: exista o subsecventa crescatoare de lungime > 3?
cum se poate rezolva utilizand distanta de editare?
Subsecventa crescatoare maximala – model
0 1 2 3 4 5 6 7 8 9
Subsecventa crescatoare maximala – model
Modelul matematic
probleme de optim
• functia obiectiv: optim R(x1, ..., xn)
• restrictii: g(x1, ..., xn) ? 0
decizie: d: s s’
unei stari s asociem o valoare z si o functie f(z) a.i. daca s
corespunde starii initiale atunci f(z) = optim R(x1, ..., xn)
politica: d1: s0 s1, d2: s1 s2, . . . , dn: sn-1 sn,
Programare dinamica – prezentare formala (cont.)
iesire
Z = z1 ... zk – cea mai lunga subsecventa comuna
exemplu:
X = abeac
Y = aebcac
Z = abac
Cea mai lunga subsecventa comuna - model
stare:
Xi = x1 x2 ... xi
Yj = y1 y2 ... yj
LCS(Xi, Yj)
cazuri de baza:
LCS(X0, Yj), LCS(Xi, Y0)
decizii posibile la evaluarea LCS(Xi, Yj)
xi == yj atunci
• zk = xi = yj /\ Zk-1 este LCS(Xi-1, Yj-1)
xi =/= yj /\ zk =/= xi atunci
• Zk este LCS(Xi-1, Yj)
xi =/= yj /\ zk =/= yj atunci
• Zk este LCS(Xi, Yj-1)
Cea mai lunga subsecventa comuna – model (cont.)
recurenta:
0 i 0 j 0
c [i, j ] c[i 1, j 1] 1 i, j 0 xi y j
max( c[i, j 1], c[i 1, j ]) i, j 0 x y
i j
A T C T G A T
exemplu: 0 0 0 0 0 0 0 0
T 0 0 1 1 1 1 1 1
G 0 0 1 1 1 2 2 2
C 0 0 1 2 2 2 2 2
A 0 1 1 2 2 2 3 3
T 0 1 2 2 3 3 3 4
A 0 1 2 2 3 3 4 4