Sunteți pe pagina 1din 4

Universitatea Al.I.

Cuza Iasi
Facultatea de Informatic

Nume:
Grupa:

Proiectarea algoritmilor Test scris 19.06.2014


Observaii:
1. Nu este permis consultarea bibliografiei.
2. Toate ntrebrile sunt obligatorii.
3. Fiecare ntrebare/item este notat cu un numr de puncte indicat n parantez.
4. Descriei conceptele utilizate n rspunsuri.
5. Algorimii vor fi descrii n limbajul Alk. Se adimit extensii cu sintax inspirat din C++ (de exemplu, for, do-while, repeatuntil, etc.). Pentru structurile de date utilizate (de exemplu, liste, mulimi)se va preciza operaiile (fr implementare daca nu se
cere explicit) i complexitile timp i spaiu ale acestora.
6. Nu este permis utilizarea de foi suplimentare.
7. Timp de rspuns: 1,25 ore.
8. 1. n contextul algoritmului
Knuth-Morris-Pratt (KMP) se consider subiectul bacbabababacab i patternul ababaca.
Algoritmul Knuth-Morris-Pratt
a) [1] S se calculeze funcia de eec f pentru exemplul de mai sus. Explicai cum se calculeaz f.
b) [0.5]
S se
e srec
eprezinte
funcia eec ca un automat.
Funct
ia
- descriere
c) [1] S se explice cum se aplic algoritmul KMP pentru exemplul considerat. Cte comparaii s-au efectuat?
Rspuns.
Algoritmul Knuth-Morris-Pratt
a)

esec
algoritm
fFunct
[j] =kiadac
a si-numai
daca p0 pk 1 este de fapt cel mai lung prefix al
lui p care se potriveste n p la pozitia de sfarsit j 1. Functia f poate fi
definita recursiv:

... Dac
a j = 0 atunci f [0] = 1 (putem presupune ca p0 p 1
desemneaz
a sm,
irulf)
vid);
determinaF
(p,
{

f[0]
= -1; j > 0. Fie k = f [j 1] (care este definit
Presupunem
a). Rezulta ca
for
(j
=
1;
j<
m;
j
=
j+1)
{
p0 pk 1 este cel mai lung prefix al lui p0 pj care se potriveste n
k = f[j-1];
p la pozitia de sfarsit j 2. Daca pk = pj 1 atunci f [j] = k + 1.
while ((k != -1) && (p[j-1] != p[k]))
Altfel, se cauta cel mai lung prefix al lui p0 pk care se potriveste n
k = f[k];
pf[j]
la pozit
ia de sfarsit j 2. Adica se face k = f [k] si se repeta
= k+1;
rat

ionamentul
de mai sus.
}
}


k
f[k]

D. Lucanu (FII - UAIC)

D. Lucanu (FII - UAIC)

-1

C
autare peste siruri

PA 2013/2014

C
autare peste siruri

PA 2013/2014

19 / 36

20 / 36


b)

-1

Algoritmul Knuth-Morris-Pratt

Algoritmul KMP
c)
i pozitia in subiect, j pozitia in pattern:
Initial: i = j = 0
Pas 1: deoarece s[0] != p[0] si j != -1, j = f[0] = -1
Pas 2: deoarece j = -1, i = i+1 = 1, j = j+1 = 0
Pas 3: deoarece s[1] = p[0], i = i+1 =2, j = j+1=1
Pas 4: deoarece s[2] != p[1] si j != -1, j = f[j] = 0
Pas 5: deoarece s[2] != p[1] si j != -1, j = f[j] = -1
Pas 6: deoarece j = -1, i = i+1 = 3, j = j+1 = 0
...

KMP(s, n, p, m, f) {
i = 0;
j = 0;
while (i < n) {
while (j != -1) && (p[j] != s[i])
j = f[j];
if (j = m-1)
return i-m+1; /* gasit p in s */
else {
i = i+1;
j = j+1;
}
}
return -1; /* p nu apare in s */
}

D. Lucanu (FII - UAIC)

-1-

C
autare peste siruri

PA 2013/2014

23 / 36

2. Se consider urmtoarea problem:


Intrare: un numr ntreg x i o secven de n numere ntregi ordonate cresctor a0 < a1 < ... < an-1 .
Ieire: i cu ai = x dac exist un astfel de i, -1 altfel.
a) [1] S se scrie un algoritm care caut secvenial x n secvena a. Procesul de cutare se termin dac se gsete i cu ai > x.
b) [0.25] S se defineasc dimensiunea unei instane pentru problema de mai sus.
c) [0.5] S se scrie care este cazul cel mai nefavorabil.
d) [0.5] S se determine complexitatea timp n cazul cel mai nefavorabil (se va considera msura uniform).
e) [1] S se determine complexitatea timp medie (se va preciza cum se calculeaz complexitatea medie in general, care sunt
valorile posibile pentru complexitate, ce distribuie de probabilitate se consider, care este formula de calcul pentru
algoritmul descris la a)).
f) [0.5] Ce se poate spune despre complexitatea problemei.
Rspuns.
a)
pos(a, n, x) {
i = 0;
while (i < n-1 && a[i] < x) i = i+1;
if (a[i] == x) return i;
return -1;
}
b) Definitia teoretica: g(p) = lumgimea instantei p = log x + log a0 + ... + log an-1 + log n
In cazul cand se considera masura uniforma, se ia g(p) = n = numarul de elemente din tablou.
c) cazul cel mai negavorabil este unul cand x >= an-1 deoarece in acest caz bucla while se executa de n-1 ori.
d)
initializare : 1 atribuire,
o bucla while: 2 comparatii + 1 adunare + 1 atribuire,
final 1 comapartie si returnarea.
In total: 1 + (n-1)*4 + 2 = 4*n + 7.
Avem 4 * n + 7 = O(n).
e)
- se considera TA(p) ca variabila aleatoare in care experienta este executia programului si rezultatul executiei este timpul de
executie. TmedA(n) este media varaibilei aleatoare TA(p) calculate pentru instantele p cu g(p)=n. Avem TmedA(n) = xiqi, unde
xi sunt valorile posibile pentru TA(p), iar qi probabilitatea cu care se obtine xi.
- valorile posibile pentru TA(p): 4*i+3, i=0, ..., n-2 (cazul cand ai >= x) si 4n+7 (cand x >= an-1)
- probabilitatea ca x sa apara in tablou = q; rezulta ca probab. ca x sa nu apara in a este 1-q iar probabilitatea sa apara pe poz i
este q/n.
- TmedA(n) = (4*i+3)*q/n + (4*n+7)*(1-q)
f) Algoritmul de mai sus arata ca problema are complexitatea O(n). Dar daca se considera un algoritm de cautare binara,
atunci putem spune ca are complexitatea O(log n). In modelul arborilor de decizie pentru cautare are complexitaea (log n).


Observatie: La a) se cerea algoritmul de cautare secventiala. Unii au scris algoritmul de cautare binara, care nu este o solutie
corecta si deci nu s-a punctat.










-2-

2. n contextul algoritmilor de programare dinamic.


a) [0.5] S se enune problema distanei (de editare) dintre iruri (DES).
b) [0.5] S se descrie noiunea de stare pentru DES.
c) [0.75] S se explice cum se aplic principiul de optim pentru a obine relaia de recuren.
de caz algoritmul
Distanta ntre d
siruri
d) [1] S se explice cum este Studii
utilizat
e programare dinamic pentru a calcula secvena de lungime minim care
transform arca n bara .
Problema
Rspuns.
a)

Se considera doua siruri = a1 an si = b1 bn formate cu


litere dintr-un alfabet A. Asupra sirului se pot face
urmatoarele operatii:
S
tergere: S(i) sterge
litera
pe pozit
ia i;
Studii
de caz deDistant
a ntre
siruri
Inserare: I (i, c) insereaza litera c pe pozitia i;
Notiunea
de stare
Modificare:
M(i, c) nlocuieste litera de pe pozitia i cu c.
Problema consta n determinarea unei secvente de operatii de
lungime minima care transforma pe n .


b)
Exemplu: Fie = carnet, = paleta. O secventa de transformari este
DS(7!
atoare
transform
ariia sub
irului i =
a1 .efectuate
. . ai n
de caz7!Distant
ntre ss
iruri
carnet
net 7! palnet
7!Studii
palet
paleta.
Transform
arile
i , par
j ) corespunz
b1 . p),
. . bM(3,
si prin
d[i, j]si valoarea
optim
sunt
M(1,
l), S(4)
I (6, a). Exist
a ao d(
altai ,secvent
a mai scurta?
j =
j
j ).
Decziile si Principiul de optim

sfex
c)
Daca i = 0, 0 este sirul vid si j se obtine prin j inserari: deci d[0, j] = j.
Consideram decizia optima prin care starea DS(a1 . . . ai , b1 . . . bj ) este
0 j) sau
transformat
a- UAIC)
ntr-o stare DS(aProgramare
, b . a. . bj 0 ) cu (i 0 < i sPA
i j2013/2014
1 . . . ai 0 dinamic
D. a
Lucanu
Dac
j =(FII
0,
atunci j se obtine
prin i 1stergeri
si avem d[i, 0]
= i. 36 / 48
0
0
(i i si j < j).
Distingem urmatoarele situatii:
In
continuare presupunem0 i, j > 0. 0
1 Dac
a ai = bj atunci i = i 1, j = j 1 si, aplicand principiul de
optim, obtinem d[i, j] = d[i 1, j 1].
2 DS(a , . . . , a , b , . . . , b ) se obt
ine prin stergere. Rezulta
1
i 1
j
i 0 = i 1, j 0 = j si, aplicand principiul de optim, obtinem
d[i, j] = d[i 1, j] + 1.Studii de caz Distanta ntre siruri
3 DS(a , . . . , a , b , . . . , b ) se obt
ine prin inserare. Avem
1
i 1
j
D.
Lucanu
- UAIC)
dinamic
0 =de
Relat
iia
ai, aplicandProgramare
i, (FII
j 0recurent
=
j 1 s
principiul
dea optim, obtinem PA 2013/2014 39 / 48
d[i, j] = d[i, j 1] + 1. Din corolarul lemei precedente rezulta ca
aceasta operatie poate fi realizata numai daca i < j.
4 DS(a , . . . , a , b , . . . , b ) se obt
ine prin modificare. Avem
1
i 1
j
i 0 = i 1, j 0 = j 1 si, aplicand principiul de optim, obtinem
Deoarece
d[i,
minim
d[i, j]
=j]d[itrebuie
1, j sa fie
1] +
1. a, rezulta:

D. Lucanu (FII - UAIC)

d[i, j] = min{d[i

Programare dinamic
a

1, j] + 1, d[i

unde
=

1, j

PA 2013/2014

1] + , d[i, j

0 , daca ai = bj
1 , daca ai =
6 bj

40 / 48

1] + 1}



d)
Initial: p[0,j] =j, p[i,0] =i, pentru i,j=0,1,2,3,4
Pas 1: d[1,1] = d[0,0] + 1 = 1 deoarece alfa[1] != beta[1]
Pas 2: d[1,2] = d[1,1] + 1 = 2.
... D. Lucanu (FII - UAIC)
Programare dinamic
a
PA 2013/2014
41 / 48

Observatie: daca se da matricea d, atunci trebuie explicat (macar pe un exemplu) cum sunt calculate aceste valori.








-3-

Ciorn

-4-

S-ar putea să vă placă și