Documente Academic
Documente Profesional
Documente Cultură
1
2. (13p) Drum crescător maximal. Fie următoarea descriere informală a unei probleme:
Pentru o matrice A cu numere ı̂ntegi de dimnesiune N ×M , determinat, i lungimea celui mai lung drum ce cont, ine
elemente ale matricii cu valori ı̂n ordine strict crescătoare. Primul element al unui drum este cel de pe prima
linie s, i prima coloană, iar orice alt element este fie cel de sub elementul anterior fie cel din dreapta (la fiecare
pas cres, te numărul liniei sau al coloanei). Lungimea unui drum este numărul de elemente pe care le cont, ine.
(a) (3p, FP) Descriet, i formal problema ca pereche (input, output) cu specificat, ii cât mai precise.
Input: N, M - numere naturale pozitive s, i A[1..N][1..M] cu numere ı̂ntregi
Output: k, astfel ı̂ncât ∃(l1 , c1 ), (l2 , c2 ) . . . (lk , ck ) cu: (l1 , c1 ) = (1, 1) s, i li ∈ 1, N ; ci ∈ 1, M ∀i ∈ 1, k s, i
(li , ci ) ∈ {(li−1 + 1, ci−1 ), (li−1 , ci−1 + 1)} ∀i ∈ 2, k s, i
k este cel mai mare număr cu această proprietate.
(b) (4p, AD, PD) Scriet, i relat, ia de recurent, ă pentru următoarea matrice care poate fi calculată pentru a
rezolva problema folosind paradigma Programare Dinamică. Specificat, i s, i cazurile de bază, ordinea de par-
curgere a subproblemelor s, i unde se găses, te răspunsul final.
len[i][j] = lungimea celui mai lung drum valid ce pleacă din (1,1) s, i ajunge la (i,j) sau 0 dacă nu există.
len[i][j] reprezintă răspunsul pentru subproblema asociată submatricii A[1..i][1..j].
len[1][j] = j, dacă A[1][1] < A[1][2] < ... < A[1][j] s, i 0 altfel (sau len[i][j] = 0, pt i = 0 sau j = 0)
len[i][1] = i, dacă A[i][1] < A[i][2] < ... < A[i][j] s, i 0 altfel
len[i][j] = i+j-1, dacă (A[i-1][j]<A[i][j] s, i len[i-1][j] > 0) sau (A[i][j-1]<A[i][j] s, i len[i][j-1] > 0)
0, altfel. pt. 1 < i ≤ N s, i 1 < j ≤ M.
Răspunsul este valoarea maximă din matricea len[1..N ][1..M ].
(c) (3p, AD, PD) Descriet, i cum se poate modifica algorimul astfel ı̂ncât să calculeze eficient s, i numărul total de
drumuri crescătoare maximale. Două drumuri sunt considerate distincte dacă au coordonate (line, coloană)
diferite pentru măcar un element de pe aceeasi pozit, ie din drum.
Se adaugă matricea paths[i][j] = numărul de drumuri distincte ce ajung ı̂n (i, j) dacă len[i][j] 6= 0.
Dacă ambele condit, ii din relat, ia de recurenta se ı̂ndeplinesc, paths[i][j] = paths[i − 1][j] + paths[i][j − 1].
Dacă doar una se ı̂ndeplines, te atunci se preia valoarea paths[][] respectivă din stânga sau deasupra.
Dacă len[i][j] = 0, atunci s, i paths[i][j] = 0.
La final, se adună toate valorile paths[i][j] pentru care len[i][j] e maxim.
(d) (3p, AD) Găsit, i o matrice A pentru care drumul crescător maximal cont, ine 3 elemente s, i există 4 = 22
drumuri crescătoare maximale. Specificat, i dimensiunea s, i valorile matricii s, i cele 4 drumuri.
A[3][3] cele 4 drumuri (^ ın general, valorile nu trebuie să fie distincte):
1 2 3 (1): 1, 2, 3 (2): 1, 2, 5
4 5 0 (3): 1, 4, 5 (4): 1, 4, 6
6 0 0
2
3. (12p) Selectarea activitat, ilor
În problema selectării activitat, ilor (inverval scheduling) cunoas, tem o mut, ime activităt, i specificate prin timpul
de ı̂nceput s, i sfârs, it al acestora. Problema cere determinarea cardinalului maxim al unei submult, imi de activtăt, i
astfel ı̂ncât nu există două activitat, i dintre acestea care să se suprapună.
(a) (3p, FP) Descriet, i formal problema ca pereche (input, output) cu specificat, ii cât mai precise.
Input: n, s[0 . . . n-1], f[0. . . n-1] - natural numbers: start and finish times of n activities, with
s[i] < f [i], ∀ i ∈ 0, n-1. Activity i starts at s[i], ends right before f [i], so it takes s[i], f [i]
Output: A ⊆ {0, . .. , n-1} maximum cardinality set of activities such that:
s[i], f [i] ∩ s[j], f [j] = ∅, ∀ i 6= j ∈ A
(b) (3p, AD, PD) O strategie greedy care produce ı̂ntotdeauna o solut, ie optimă este să alegem la fiecare
pas activitatea care se termină prima, dintre activităt, ile rămase. O altă strategie similară este să alegem
activitatea care ı̂ncepe ultima. Arătat, i că pentru orice date de intrare, există ı̂ntotdeauna cel put, in o solut, ie
optimă care cont, ine activitatea care ı̂ncepe ultima.
Fie last activitatea cu cel mai târziu timp de ı̂nceput: s[last] = maxim global. Pentru orice solut, ie optimă
OP T avem fie last ∈ OP T s, i atunci cerint, a e adevărată, fie ∃ lastopt 6= last activitatea care ı̂ncepe ultima
din OP T . Submult, imea OP T \ lastopt ∪ last are:
3
Ciornă