Kanuni ya utafutaji wa mfuatano hutumika kupata utokeaji wa muundo maalum(mshipa mdogo) ndani ya maandishi makubwa(kamba). Algorithm hii ina jukumu muhimu katika usindikaji wa maandishi, kutafuta, na kazi za udanganyifu.
Inavyofanya kazi
- Anza na maandishi(kamba) na muundo(mfuatano mdogo) wa kutafuta.
- Rudia maandishi kwa herufi moja baada ya nyingine.
- Kwa kila herufi kwenye maandishi, linganisha na herufi ya kwanza ya muundo.
- Ikiwa kuna mechi, angalia ikiwa herufi zinazofuata pia zinalingana na muundo.
- Ikiwa muundo unalingana kabisa, rekodi nafasi ya kuanzia ya mechi.
- Endelea kutafuta muundo katika maandishi.
Mfano
Fikiria maandishi: "ababcababcabcabc" Na muundo: "abc"
- Anza kwenye nafasi 0. Linganisha "a" na herufi ya kwanza "a" katika muundo.
- Linganisha imepatikana, nenda kwa herufi zinazofuata: "b" na "b", na "a" na "c".
- Endelea kulinganisha: "b" na "a", "a" na "b", na "b" na "c".
- Mechi imeshindwa katika nafasi ya 2.
- Anza tena kwenye nafasi ya 3. Linganisha "a" na herufi ya kwanza "a" katika muundo.
- Ulinganifu uliofaulu: "a" na "a", "b" na "b", na "c" na "c".
- Nafasi ya rekodi 3.
Mchoro "abc" unapatikana katika nafasi 0, 6, na 9.
Msimbo wa Mfano katika C++
#include <iostream>
#include <string>
#include <vector>
std::vector<int> stringSearch(const std::string& text, const std::string& pattern) {
std::vector<int> positions;
for(int i = 0; i <= text.length()- pattern.length(); ++i) {
int j = 0;
while(j < pattern.length() && text[i + j] == pattern[j]) {
++j;
}
if(j == pattern.length()) {
positions.push_back(i);
}
}
return positions;
}
int main() {
std::string text = "ababcababcabcabc";
std::string pattern = "abc";
std::vector<int> result = stringSearch(text, pattern);
std::cout << "Pattern found at positions: ";
for(int pos: result) {
std::cout << pos << ";
}
std::cout << std::endl;
return 0;
}
Katika mfano huu, stringSearch
chaguo la kukokotoa linatumika kupata matukio ya muundo "abc" ndani ya maandishi "ababcababcabcabc". Matokeo yake yatakuwa vekta iliyo na nafasi za kuanzia za mechi.