Documente Academic
Documente Profesional
Documente Cultură
Programare dinamic
(2)
http://www.eed.usv.ro/~vatavu 1/26
Proiectarea Algoritmilor
Intrare Ieire
=8 6
=7 1 5 2 8 2 4 1 8 7 10 1 2 2 4 7 10
http://www.eed.usv.ro/~vatavu 2/26
Proiectarea Algoritmilor
Soluie:
Pentru fiecare element [ ] vom calcula lungimea celei mai
lungi subsecvene cresctoare care poate fi format
ncepnd cu [ ] i vom reine aceast lungime ntr-un nou
vector , la poziia (memoizare).
Presupunnd deja calculate valorile [ ] pentru fiecare
j = i + 1, n 1 , construim cea mai lung subsecven
cresctoare din mulimea care ncepe cu elementul [ ],
adugnd aceste element celei mai lungi subsecvene
cresctoare care ncepe cu [ ] ( j = i + 1, n 1 ) cu condiia ca
[ ] [ ].
http://www.eed.usv.ro/~vatavu 3/26
Proiectarea Algoritmilor
1 i = n 1
lung[i] = 1 a[i ] > a[ j ] j = i + 1, n 1
lung[k ] + 1 k = arg max lung[ j ] / a[i] < a[ j ], j = i + 1, n 1
{ }
j
i 0 1 2 3 4 5 6 7 8 9 10
a 7 1 5 2 8 2 4 1 8 7 10
lu
i=10 1
ng
i=9 2 1
i=8 2 2 1
i=7 3 2 2 1
i=6 3 3 2 2 1
i=5 4 3 3 2 2 1
i=4 3 4 3 3 2 2 1
i=3 5 3 4 3 3 2 2 1
i=2 4 5 3 4 3 3 2 2 1
i=1 6 4 5 3 4 3 3 2 2 1
i=0 4 6 4 5 3 4 3 3 2 2 1
http://www.eed.usv.ro/~vatavu 4/26
Proiectarea Algoritmilor
Complexitate temporal?
Complexitate spaial?
http://www.eed.usv.ro/~vatavu 5/26
Proiectarea Algoritmilor
a 7 1 5 2 8 2 4 1 8 7 10
lung 4 6 4 5 3 4 3 3 2 2 1
4 6 4 5 3 4 3 3 2 2 1
4 6 4 5 3 4 3 3 2 2 1
4 6 4 5 3 4 3 3 2 2 1
4 6 4 5 3 4 3 3 2 2 1
4 6 4 5 3 4 3 3 2 2 1
http://www.eed.usv.ro/~vatavu 6/26
Proiectarea Algoritmilor
http://www.eed.usv.ro/~vatavu 7/26
Proiectarea Algoritmilor
http://www.eed.usv.ro/~vatavu 8/26
Proiectarea Algoritmilor
Intrare Ieire
=11 4
=7 6 5 2 8 2 8 1 4 7 10 6 2 8
7
=7
=6 9 2 1 8 9 7
7 6 5 2 8 2 8 1 4 7 10
692189 7
http://www.eed.usv.ro/~vatavu 9/26
Proiectarea Algoritmilor
Cazuri particulare:
1 daca a[0] = b[0]
lung[0,0] =
0 altfel
1 daca a[0] = b[ j ]
lung[0, j ] =
lung[0, j 1] altfel
http://www.eed.usv.ro/~vatavu 10/26
Proiectarea Algoritmilor
http://www.eed.usv.ro/~vatavu 11/26
Proiectarea Algoritmilor
http://www.eed.usv.ro/~vatavu 12/26
Proiectarea Algoritmilor
lung[i 1, j ]
lung[i, j ] = max lung[i, j 1]
a[i ] == b[ j ] ? lung[i 1, j 1] + 1 : lung[i 1, j 1]
http://www.eed.usv.ro/~vatavu 13/26
Proiectarea Algoritmilor
a/b 7 6 5 2 8 2 8 1 4 7 10
6 0 1 1 1 1 1 1 1 1 1 1
9 0 1 1 1 1 1 1 1 1 1 1
2 0 1 1 2 2 2 2 2 2 2 2
1 0 1 1 2 2 2 2 3 3 3 3
8 0 1 1 2 3 3 3 3 3 3 3
9 0 1 1 2 3 3 3 3 3 3 3
7 1 1 1 2 3 3 3 3 3 4 4
a/b 7 6 5 2 8 2 8 1 4 7 10
6 0 1 1 1 1 1 1 1 1 1 1
9 0 1 1 1 1 1 1 1 1 1 1
2 0 1 1 2 2 2 2 2 2 2 2
1 0 1 1 2 2 2 2 3 3 3 3
8 0 1 1 2 3 3 3 3 3 3 3
9 0 1 1 2 3 3 3 3 3 3 3
7 1 1 1 2 3 3 3 3 3 4 4
http://www.eed.usv.ro/~vatavu 14/26
Proiectarea Algoritmilor
procedura LCS(int[] a, int n, int[] b, int m)
lung new int[n,m]
Complexitatea temporal/spaial?
http://www.eed.usv.ro/~vatavu 15/26
Proiectarea Algoritmilor
procedura TipreteLCS(int[] a, int n, int[] b, int m, int[,] lung)
scrie Lungimea maxim este , lung[n-1,m-1]
scrie Subsecvena este:
Pseudo
i n-1
cod j m-1
ct timp i >= 0 i j >= 0 execut
dac a[i] == b[j] atunci
scrie a[i]
i i-1
j j-1
altfel
dac i-1>=0 i lung[i,j] == lung[i-1,j] atunci
i i-1
altfel
j j-1
sf.ct timp
sf.procedur
Complexitatea temporal/spaial?
http://www.eed.usv.ro/~vatavu 16/26
Proiectarea Algoritmilor
Intrare Ieire
=9 5
=4 1 7 6 3 5 6 2 1 16361
http://www.eed.usv.ro/~vatavu 19/26
Proiectarea Algoritmilor
procedura Palindrom(int[] a, int n)
b = new int[n]
pentru i 0, n-1 execut
Pseudo b[i] a[n-1-i]
cod lung LCS(a, n, b, n)
TipreteLCS(a, n, b, n, lung)
sf.procedur
Complexitate temporal?
http://www.eed.usv.ro/~vatavu 20/26
Proiectarea Algoritmilor
Intrare Ieire
CARTE 2
ARTA terge C
Modific E A
http://www.eed.usv.ro/~vatavu 21/26
Proiectarea Algoritmilor
http://www.eed.usv.ro/~vatavu 22/26
Proiectarea Algoritmilor
Cazurile particulare:
0 a[0] == b[0]
cost[0,0] =
1 altfel
j=1,m-1
j a[0] == b[ j ]
cost[0, j ] =
cost[0,j-1] + 1 altfel (j operaii de adugare)
i=1,n-1
i a[i ] == b[0]
cost[i,0] =
cost[i 1,0] + 1 altfel (i operaii de tergere)
http://www.eed.usv.ro/~vatavu 23/26
Proiectarea Algoritmilor
http://www.eed.usv.ro/~vatavu 24/26
Proiectarea Algoritmilor
i=1,n-1; j=1,m-1
cost[i 1, j 1] a[i ] == b[ j ]
1 + cost[i 1, j 1]
a[i ] b[ j ]
cost[i, j ] = min
1 + cost[i 1, j ] a[i ] b[ j ]
1 + cost[i, j 1] a[i ] b[ j ]
http://www.eed.usv.ro/~vatavu 26/26