Sunteți pe pagina 1din 2

Trie. KMP.

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

• Easy: strmatch or Pattern Find KMP.

• Easy: Password KMP.

• Medium: Prefixes and Suffixes KMP + DP.

• Medium: Messenger KMP.

• Medium: Lucky Common Subsequence KMP + DP.


• Medium: Unlucky-strings KMP + DP + Matrix Exponentiation.

• Medium: Vasiliy’s Multiset Trie.

• Medium: A Lot of Games Trie + DP.

• Impossible: Play Time Trie + Game Theory.

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