Documente Academic
Documente Profesional
Documente Cultură
1
3. (12p) Greedy.
Context: proiectarea unui algoritm greedy pentru următoarea problemă computat, ională, descrisă informal. Un
număr de n student, i au luat punctajele x1 ≤ x2 ≤ . . . ≤ xn (numere naturale). Profesorul vrea să ı̂mpartă
student, ii ı̂n grupe, astfel ı̂ncât o grupă să cont, ină student, i ı̂ntre care să nu fie o diferent, a mai mare de k puncte.
Dacă x este cel mai mic punctaj al unui student dintr-o grupă, atunci acea grupă poate cont, ine student, i cu
punctaje din intervalul [x, x + k]. Scopul este minimizarea numărului de grupe.
Cerint, e:
(a) (2p) Să se formuleze problema de mai sus ca pereche (input,output). Se vor da formulări cât mai precise şi
riguroase.
Input: n ∈ N, x[1..n] - punctajele student, ilor, ordonate crescător (opt, ional, se poate considera k ca făcând
parte din input; sau se poate considera un parametru al problemei)
Output: cel mai mic număr natural l a.ı̂. ∃y1 , . . . , yl cu proprietatea că ∀i ∈ {1, . . . , n}.∃j ∈ {1, . . . , l}.xi ∈
[yj , yj + k].
(b) (3p) Să se găsească un contraexemplu care arată că strategia de a alege la fiecare pas o grupă cu cât mai
mult, i student, i (respectând restrict, ia) nu conduce la solut, ia optimă.
Pentru k = 10, n = 7, x1 = 0, x2 = 8, x3 = 9, x4 = 10, x5 = 11, x6 = 12, x7 = 20, strategia va alege grupa
[8, 18] (care cont, ine 5 student, i) s, i va mai fi nevoie de ı̂ncă două grupe pentru x1 = 0, x7 = 20. În total,
strategia propusă ar alege 3 intervale, ı̂n timp ce solut, ia optimă are doar 2: intervalele [0, 10] s, i [10, 20].
(c) (4p) Să se descrie o strategie greedy care conduce la solut, ia optimă. Argumentat, i că strategia propusă
produce solut, ia optimă.
La fiecare pas, se alege un interval de punctaje cu cât mai mult, i student, i care ı̂ncepe exact cu cel mai mic
punctaj (neacoperit ı̂ncă).
Presupunând că ar exista o solut, ie optimă ı̂n care al i-lea interval (ı̂n ordinea crescătoare a punctajelor de
ı̂nceput) nu ar ı̂ncepe cu cel mai mic punctaj neacoperit de primele i−1 intervale, acesta (al i-lea interval) ar
putea fi putea “mutat” spre dreapta până la primul punctaj neacoperit, fără a afecta optimalitatea solut, iei.
(d) (3p) Să se scrie ı̂n Alk un algoritm pentru problema de mai sus care implementează strategia greedy propusă
la punctul anterior.
greedy(k, n, x)
{
start = x[1];
count = 1;
for (i = 1; i <= n; ++i) {
if (x[i] > start + k) {
start = x[i];
count++;
}
}
return count;
}
Ciornă.
2
4. (12p) Programare Dinamică.
Context: proiectarea unui algoritm, bazat pe paradigma programării dinamice, care găses, te lungimea celei mai
mari subsecvent, e contigue care apare atât ı̂n sens direct cât s, i invers ı̂ntr-un s, ir de numere. De exemplu, pentru
s, irul 0 1 4 3 5 6 3 4 1, cea mai lungă astfel de subsecvent, ă are lungime 3 (secvent, a 1 4 3, care apare s, i invers:
3 4 1).
Cerint, e:
(a) (2p) Să se formuleze problema de mai sus ca pereche (input,output). Se vor da formulări cât mai precise şi
riguroase.
Input: n ∈ N, S[0..n − 1]
Output: cel mai mare număr l a.ı̂. ∃i, j cu proprietatea că S[i..i + l − 1] = S[j..j − l + 1].
(b) (3p) Fie i, j două pozit, ii ı̂n s, ir; notăm cu d(i, j) lungimea celei mai lungi subsecvent, e contigue care apare
atât ı̂n sens direct, pe pozit, iile i, i + 1, . . . , i + d(i, j) − 1, cât s, i ı̂n sens invers, pe pozit, iile j − d(i, j) + 1, j −
d(i, j) + 2, . . . , j.
Fie i, j pozit, ii ı̂n s, ir. Să se determine valorile d(n − 1, j) s, i d(i, 0).
1 dacă S[n − 1] = S[j] 1 dacă S[0] = S[i]
d(n − 1, j) = d(i, 0) =
0 altfel 0 altfel
(c) (4p) Fie i < n − 1 s, i j > 0 două pozit, ii ı̂n s, ir. Să se determine o relat, ie de recurent, ă pentru d(i, j), ı̂n
funct, ie de d(i + 1, j − 1).
0 dacă S[i] 6= S[j]
d(i, j) =
1 + d(i + 1, j − 1) dacă S[i] = S[j]
Ciornă.
3
Ciornă.