Documente Academic
Documente Profesional
Documente Cultură
Cuza Iasi
Facultatea de Informatic
Nume:
Grupa:
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]
-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-
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-