Documente Academic
Documente Profesional
Documente Cultură
Are drept scop stabilirea pozitiei primei aparitii a sirului p in sirul s; rezultatul
cautarii este indicele i al primei aparitii
char s[N];
char p[M]; /* M<<N*/
Precizarea coincidentei se face cu P(i,j):
P(i,j) A k: 0 <= k < j : s i+k == p k
In cazul in care P(i,j) este adevarat, avem o coincidenta de j caractere
incapand cu pozitia i in sirul s; pentru a avea o coincidenta pe lungimea M este
necesar sa fie adevarat P(i, M)
Precizarea primei aparitii se face cu Q(i):
Q(i) A k : 0 <= k < i : ~P(k, M)
Cautarea directa lucreaza destul de repede daca se presupune ca nepotrivirea
dintre s si p apare dupa cel mult cateva comparatii O(N)
Cel mai defavorabil caz este cand nepotrivirea dintre s si p apare totdeauna pe
ultimul caracter din p O(N*M)
Eficienta scazuta: modelul p avanseaza cu o singura pozitie dupa o nepotrivire
f i+1=f i*(i+1)
i=0; f 0= 1 ; 0!=1; n!=n*(n-1)!
Eliminare
- recursivitate de sfarsit: apelul recursiv este ultima instructiune; se
inlocuieste apelul cu o bucla de iteratie simpla
P(n)=P [ Si, daca B atunci ( n=n-1; goto P)]
- Reursivitate normala
P(x)=P [Si, daca B atunci P(y), Sj]
programatorul gestioneaza stiva in care se salveaza contextul apelului