Documente Academic
Documente Profesional
Documente Cultură
StringPatterns KMP RabinKarp 2
StringPatterns KMP RabinKarp 2
Se observă că:
• Detalii de implementare:
• problema numerelor mari: fiind o funcție care implică multe ridicări la putere și adunări, pentru
a nu avea probleme cu depășirea int-ului sau long long-ului toate calculele se vor face %MOD
(ex. mod = 40099, 319993)
• modulul: deoarece egalitatea în modul nu implică neapărat egalitatea numerelor, vom folosi
două module diferite. Dacă ambele numere formate folosind modulele vor fi egale atunci vom
trage concluzia că sunt egale stringurile.
• structurarea datelor: RH depinde de mulți parametrii – stringul, v, mod – și cel mai ușor va fi
implementată folosind o structură/clasă.
ABXABCABCABY
ABCABY
KMP (Knuth-Morris-Pratt)
ABXABCABCABY
ABCABY
În mod normal atunci când două șiruri nu se potrivesc, am începe de la poziția următoare verificarea.
KMP (Knuth-Morris-Pratt)
ABXABCABCABY
ABCABY
KMP (Knuth-Morris-Pratt)
ABXABCABCABY
ABCABY
KMP (Knuth-Morris-Pratt)
ABXABCABCABY
ABCABY
Folosind această observație, ne gândim să formăm mai întâi un șir care sa ne ajute în determinarea prefixului. Iar apoi
să-l utilizăm în parcurgere
KMP (Knuth-Morris-Pratt)
Pași în algoritmul KMP:
1. Formarea prefixului
2. Utilizarea acestuia în parcurgerea șirului
ABXABCABCABY
ABCABY
-100012
KMP (Knuth-Morris-Pratt)
1. Formarea prefixului - exemple
KMP (Knuth-Morris-Pratt)
1. Formarea prefixului - cod
KMP (Knuth-Morris-Pratt)
2. Parcurgerea
KMP (Knuth-Morris-Pratt)
P- șirul de prefixe
p - șirul căruia îi căutăm aparițiile din B
m – lungimea șirului p
n – lungimea șirului s