Sunteți pe pagina 1din 4

Universitatea Al.I.

Cuza Iasi
Facultatea de Informatic

Nume:
Grupa:

Proiectarea algoritmilor Test scris 11.04.2014, A


Observaii:
1. Nu este permis consultarea bibliografiei.
2. Toate ntrebrile sunt obligatorii.
3. Fiecare ntrebare/itemAlgoritmul
este notat
cu un numr de puncte indicat n parantez. Descriei conceptele utilizate n rspunsuri.
Boyer-Moore
4. Algorimii vor fi descrii n limbajul Alk. Se adimit extensii cu sintax inspirat din C++ (de exemplu, for, do-while, repeatuntil, etc.).caracterului
Pentru structurile
Regula
raude date utilizate (de exemplu, liste, mulimi)se va preciza operaiile (fr implementare daca nu se
cere explicit) i complexitile timp i spaiu ale acestora.
5.
Nu este
permis
utilizarea
foi suplimentare.
Englez
a: bad
character
shiftderule
6. Timp de rspuns: 1 or.
Evita repetarea comparatiilor fara succes n cazul caracterelor care nu apar
1.
n contextul
algoritmului
Boyer-Moore
se consider subiectul E CARATA DAR NU E ARATATA i patternul ARATAT.
n pattern
sau ntr-un
sufix (maximal)
al acestuia.
a) [0.5] S s8
e enune regula caracterului ru (bad character rule).
>
ultimeieaparit
ii din , literele
dac
a Ccare
apare
nn
pattern
b) [0.5] Presupunnd
ca iaalfabetul
format
apar
cele dou iruri, s se calculeze funcia de salt.
<m pozit
c)
[0.5] ]S=
se aenune
egula
celui mai bun sufix.
salt[C
lui C rn
pattern
>
d) [0.5] S s:
e m
calculeze valorile goodSuff (j). , altfel
e)
[
1]
S

s
e
e
xplice
se aplic a[lgoritmul
oyer-Moore
(alternativ, salt(Cc)um
= max({0}
{i < m |Bp[i]
= C })) pentru exemplul considerat. Cte comparaii s-au efectuat?
Rspuns.
bm-bad-character-shift-rule.pptx
a)
Daca p[j] 6= s[i] = C ,
1

daca aparitia cea mai din dreapta a lui C n p este k < j, p[k] si s[i] sunt
Algoritmul Boyer-Moore
aliniate

Regula
raudin dreapta a lui C n p este k > j, p este translatat la
2 dac
acaracterului
aparitia cea mai
dreapta cu o pozitie

Engleza: bad character shift rule


3

daca C nu apare n p, patternul p este aliniat cu s[i + 1..i + m] (saltul = j)

Algoritmul
Boyer-Moore
revizuit
Evita repetarea comparat
iilor
fara succes
n cazul caracterelor care nu apar
D. Lucanu (FII - UAIC)
C
autare peste siruri
PA 2013/2014
b)
n pattern
sau ntr-un sufix (maximal)
al acestuia.
8
Regula sufixului
bun
>
a C apare n pattern
<m pozitia ultimei aparitii , dac
salt[C ] = a lui C n pattern
>
:
m
, altfel
(alternativ, salt(C ) = max({0} [ {i < m | p[i] = C }))

A C D E N R T U
6 1 6 6 6 6 4 2 6



bm-bad-character-shift-rule.pptx
c)
revizuit
Daca p[j] 6= s[i]c
CAlgoritmul
,
Presupunem
a= p[j
1] Boyer-Moore
nu se potrive
ste (dupa ce s-au potrivit p[j..m 1].
1
a
aparit

ia
cea
mai
din
dreapta
a
lui
C n p este k < j, p[k] si s[i] sunt
1 dac
daca goodSu
> 0, face
Preprocesarea
n(j)cazul
2 un salt egal cu m goodSu (j) (cazul 1)
aliniate
2 dac
a goodSu
(j) =Boyer-Moore
0,dreapta
facerevizuit
un
salt egal cu m lp(j) (cazul 1)
2 dac
a aparitia cea
mai din
a lui C n p este k > j, p este translatat la
Algoritmul
pozit
ie potriveste, atunci j = m si saltul este corect.
Dacadreapta
p[m cu1]o nu
se

goodSu
- definit
ie p este aliniat cu s[i + 1..i + m] (saltul = j)
nu apare
n p, patternul
unde daca C (j)
3

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2013/2014

lp(j) = lungimea celui mai lung prefix al lui p care este sufix al lui
p[j..m 1].

d)
Lema (j) = pozitia de sf
goodSu
arsit a unei aparitii a lui p[j..m
lp(j)precedat
= max{k
| 0 p[j
k 1]|p[j..m 1] ^ lcs(k, p) = k.
este
a de
D. Lucanu (FII - UAIC)

C
autare peste siruri

14 / 36

14 / 36


A R A T A T

1] care nu
PA 2013/2014

1 2

3 4

34 / 36

dac
0 0 0 0 3 0
a nu
astfel de copie,
Exercit
iuexist
Sa aseodemonstreze
lema.goodSu (j) = 0
e)
0Rezult
goodSu
(j) < lp(j)
m 1;
goodSu
> 0 O(m).
atunci el reprezinta o
a ca valorile
potdac
fi acalculate
n (j)
timpul
daca exista nepotrivire pe pozitia p[j], mareste k (= pozitia de inceput al lui i la urmatoarea iteratie) cu maximul dintre salturile
copie a unui sufix bun care permite un salt de m goodSu (j) pozitii
date de regula caracterului rau si regula sufixului bun.
deoarece p[m..m 1] este sirul vid, goodSu (m) = cea mai din dreapta
E
C A R A ...
pozitie k cu p[k] 6= p[m 1] ( 1 daca toate caracterele sunt egale).
A R A T A T
D. Lucanu
(FII - UAIC)
peste siruri
2013/2014
/ 36
se aplica
regula
caracterului rau,Cautare
se incrementeaza
pozitia iPAdin
text cu33salt[A]=1
(se aliniaza A) [1 comparatie]
C

A ...

A R A T A T
D. Lucanu (FII - UAIC)
utare peste siruri
36
se aplica
regula caracterului rau,Case
incrementeaza pozitia i PA
cu2013/2014
salt[R]=431 /(se
aliniaza R) (3 comparatii)
...

-1-

2. n contextul algoritmilor greedy.


a) [0.5] S se enune problema codurilor Huffman.
b) [0.5] S se explice legtura dintre codurile Huffman i arborii binari.
c) [0.5] S se explice cine sunt mulimea de stri S i colecia de submulimi C.
d) [0.5] S se descrie pasul de alegere local dinalgoritmul greedy care construiete arborele Huffman.
e) [1] S se explice cum este utilizat algoritmul greedy pentru a construi o codificare Huffman pentru textul streets are never
stars (mesajele sunt carcactere care apar n text, frecvena este dat de numrul de apariii).
Rspuns.
a)
Intrare
n mesaje M0, M1, ..., Mn-1 cu frecventele w0, w1, ..., wn-1 codificate astfel incat cod(Mi) {0,1}*, i,j: i j cod(Mi) nu
este prefix a lui cod(Mj) ; lungimea medie a codificarii = 1/n i=0,n-1 (|cod(Mi)|wi)
Iesire
codificare cu lungimea medie minima
b)
Codurile pot fi memorate de un arbore binar a.i. orice cod descrie unic un drum de la radacina la frontiera.
Regula de parcurgere: cod = 0, se coboara la copilul stang; cod = 1, se coboara la copilul drept.
Un exemplu.
c)
S cea mai mica multime de arbori construita astfel:
1) wi S pentru orice i
2) T1, T2 S T1 T2 S
De explicat operatia
X C daca:
1) ( T1, T2 X) ( T1 T2 || T2 T1), unde T1 T2 ddaca exista T a. i. T2 = T1 T
2) X este finita
d)
alege T1, T2 cu radacini minime in B si T1 T2 nu este in B
B = B {T1, T2} {T1 T2}
e)
- se calculeaza mai intai frecventele ( este caracterul spatiu)
a e n r s t v
2 5 1 4 4 3 1 3
pas 1:
1

pas 2:
2

pas 3:

4
2

2
1

a
3


...

-2-

3. Se consider problema Submulime de sum dat (SSD):


Intrare: o mulime A astfel orice a A are o mrime s[a] Z+, i un numr M Z+ .
Ieire: cel mai mare M* M a.. exist A A cu (s[a] a A) = M*.
a) [1] S se arate c SSD este n NP. Justificare. Indicatie (pe tabla): se va arata ca varianta ca problema de decizie este in NP.
b) [0.5] Exist algoritm determinist polinomial care rezolv SSD? Justificare.
c) [1] S se dea un exemplu de algoritm care calculeaz o aproximare a soluiei optime. Ce se poate spune despre aproximare?
d) [0.5] Precizai complexitatea timp a algoritmului de aproximare.
Rspuns.
a)
- se considera varianta data ca problema decizie, care cere daca se poate alege A a.i. M* = M si notata SSDDec
- trebuie dat un algoritm nedeterminist care rezolva SSDDec
nondetSSDDec (A, s, M) {
foreach (a in A) x[a] = choice(2); // partea de ghicire
//partea de verificare
mStar = 0;
foreach (a in A) mStar = mStar + x[a];
if (mStar = M) return succes;
else return failure;
}
b) Oricare din cele doua variante este problema NP-completa. Deoarece nu se stie daca P = NP, nu se poate da un raspuns
exact. Dar se stie ca pana acum nu s-a gasit pentru niciuna din probleme algoritm determinist polinomial care sa o rezolve.
c)
ssdAprox(n, s, M, ) {
L[0] = (0);
for (i = 1; i <= n; ++i) {
Ltemp = merge(L[i-1], L[i-1] + s[i]);
curata(Ltemp, /n, L[i]);
elimina din L[i] valorile mai mari decit M;
}
return cea mai mare valoare din L[n];
}
unde curata(Ltemp, /n, L[i]) pune in L[i] lista Ltemp curatata de delta = /n.
- este o schema de aproximare polinomial completa, adica eroarea relativa este marginita de si complexitatea timp este
polinomiala ata in n cat si 1/.
d)
Complexitatea timp va fi O(n maxi L[i].length()). Se stie ca L[i].length() = O(n ln M /) (teorema de la curs).













-3-

Ciorn

-4-

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