Algoritmus Text Search je základní metodou při zpracování textu a vyhledávání informací. Tento algoritmus nám umožňuje lokalizovat a identifikovat výskyty podřetězce(nebo vzoru) v rámci většího kusu textu.
Jak to funguje
- Začněte s větším textem(nebo dokumentem) a podřetězcem, který chcete vyhledat.
- Postupně procházejte každý znak textu.
- Porovnejte podřetězec s částí textu, která má stejnou délku jako podřetězec. Pokud je nalezena shoda, zaznamenejte aktuální pozici.
- Přejděte na další pozici a pokračujte ve srovnání.
Příklad
Zvažte text: "Pojďme hledat podřetězec v tomto textu, abychom viděli, jak algoritmus funguje."
A podřetězec, který se má hledat: "podřetězec"
- Začněte na pozici 0. Porovnejte
Let's "podřetězcem". Žádná shoda. - Přesuňte se na pozici 1. Porovnejte
et'ss "podřetězcem". Žádná shoda. - Přesuňte se na pozici 2. Porovnejte
t's" s "podřetězcem". Žádná shoda. - Přesuňte se na pozici 3. Porovnejte
's ss "podřetězcem". Žádná shoda. - Přesuňte se na pozici 4. Porovnejte
ses "podřetězcem". Žádná shoda. - Přesuňte se na pozici 5. Porovnejte
seas "podřetězcem". Žádná shoda. - Přesuňte se na pozici 6. Porovnejte
earcs "podřetězcem". Žádná shoda. - Přesuňte se na pozici 7. Porovnejte
archs "podřetězcem". Žádná shoda. - Přesuňte se na pozici 8. Porovnejte
rch" s "podřetězcem". Žádná shoda. - Přesuňte se na pozici 9. Porovnejte
ch ws "podřetězcem". Žádná shoda. - Přesuňte se na pozici 10. Porovnejte
h wis "podřetězcem". Žádná shoda. - Přesuňte se na pozici 11. Porovnejte "
wits "podřetězcem". Žádná shoda. - Přesuňte se na pozici 12. Porovnejte
withs "podřetězcem". Žádná shoda. - Přesuňte se na pozici 13. Porovnejte
ithis "podřetězcem". Žádná shoda. - Přesuňte se na pozici 14. Porovnejte
thins "podřetězcem". Žádná shoda. - Přesuňte se na pozici 15. Porovnejte
hinns "podřetězcem". Žádná shoda. - Přesuňte se na pozici 16. Porovnejte
in ts "podřetězcem". Žádná shoda. - Přesuňte se na pozici 17. Porovnejte
n ths "podřetězcem". Žádná shoda. - Přesuňte se na pozici 18. Porovnejte "
this "podřetězcem". Žádná shoda. - Přesuňte se na pozici 19. Porovnejte
thiss "podřetězcem". Žádná shoda. - Přesuňte se na pozici 20. Porovnejte
his" s "podřetězcem". Žádná shoda. - Přesuňte se na pozici 21. Porovnejte
is ts "podřetězcem". Žádná shoda. - Přesuňte se na pozici 22. Porovnejte
s tes "podřetězcem". Žádná shoda. - Přesuňte se na pozici 23. Porovnejte
ubsts "podřetězcem". Žádná shoda. - Přesuňte se na pozici 24. Porovnejte
bstrs "podřetězcem". Žádná shoda. - Přesuňte se na pozici 25. Porovnejte
stres "podřetězcem". Žádná shoda. - Přejděte na pozici 26. Porovnejte
trins "podřetězcem". Žádná shoda. - Přesuňte se na pozici 27. Porovnejte
rings "podřetězcem". Shoda nalezena, rekordní pozice 27.
Podřetězec "podřetězec" se nachází na pozici 27 v textu.
Příklad kódu v C++
#include <iostream>
#include <string>
#include <vector>
std::vector<int> textSearch(const std::string& text, const std::string& query) {
std::vector<int> positions;
for(int i = 0; i <= text.length()- query.length(); ++i) {
int j = 0;
while(j < query.length() && text[i + j] == query[j]) {
++j;
}
if(j == query.length()) {
positions.push_back(i);
}
}
return positions;
}
int main() {
std::string text = "Let's search for a substring within this text to see how the algorithm works.";
std::string query = "substring";
std::vector<int> result = textSearch(text, query);
std::cout << "Substring found at positions: ";
for(int pos: result) {
std::cout << pos << ";
}
std::cout << std::endl;
return 0;
}
V tomto příkladu textSearch se funkce používá k nalezení pozic podřetězce "podřetězec" v textu. Výsledkem bude vektor obsahující počáteční pozice zápasů.

