Documente Academic
Documente Profesional
Documente Cultură
Aplicat, ii
Functia Prefix pentru un string S de lungime N se defineste ca un tablou P , unde P [i] este
lungimea celui mai lung prefix al subsirului S[0..i] care este si sufix al aceluiasi subsir. Prin
definitie un sir nu este prefix siesi.
0 1 2 3 4 5 6 7 — 0 1 2 3 4 5 6
A Y A X A Y A Y A A B A A A B
0 0 1 0 1 2 3 2 — 0 1 0 1 2 2 3
Mai intai trebuie facuta observatia ca pentru un subsir T care este si prefix si sufix pentru
un sir S, orice subsir al lui T care ii este si prefix si sufix, este si prefix si sufix si lui S. De
exemplu pentru S = ayaxaya si T = aya se poate vedea subsirul a .
Ne vom folosi de doi indici pentru a contrui P , un i pentru caracterul curent S[i] si un j
pentru pozitia ultimului caracter al celui mai lung prefix-sufix care in acelasi timp indica si
lungimea, adica P [i]. Cand incrementam i-ul verificam daca S[i] = S[j] pentru a mari cu 1 pe
P [i]. In caz contrar ne orientam dupa urmatorul cel mai mare prefix-sufix mai mic decat cel de
lungime j, adica P [j − 1] pe care incercam sa il extindem. Daca nu se poate nici cu aceasta
atunci incercam cu urmatorul cel mai mare mai mic decat el, cel de lungime P [P [j − 1] − 1],
samd pana cand j devine 0 si ne oprim, caz in care P [i] este 0.
Deoarece in cadrul fiecarei iteratii pentru i valoarea j este incrementata cel mult o data avem
complexitatea liniara.
KMP explained
Trie explained
Aplicat, ii