Ο αλγόριθμος αναζήτησης κειμένου είναι μια θεμελιώδης μέθοδος για την επεξεργασία κειμένου και την ανάκτηση πληροφοριών. Αυτός ο αλγόριθμος μας επιτρέπει να εντοπίσουμε και να αναγνωρίσουμε τα περιστατικά μιας υποσυμβολοσειράς(ή μοτίβου) μέσα σε ένα μεγαλύτερο κομμάτι κειμένου.
Πως δουλεύει
- Ξεκινήστε με ένα μεγαλύτερο κομμάτι κειμένου(ή έγγραφο) και μια δευτερεύουσα συμβολοσειρά για αναζήτηση.
- Επαναλάβετε σε κάθε χαρακτήρα του κειμένου διαδοχικά.
- Συγκρίνετε τη δευτερεύουσα συμβολοσειρά με ένα τμήμα του κειμένου που έχει το ίδιο μήκος με τη δευτερεύουσα συμβολοσειρά. Εάν βρεθεί αντιστοιχία, καταγράψτε την τρέχουσα θέση.
- Μεταβείτε στην επόμενη θέση και συνεχίστε τη σύγκριση.
Παράδειγμα
Σκεφτείτε το κείμενο: "Ας αναζητήσουμε μια υποσυμβολοσειρά σε αυτό το κείμενο για να δούμε πώς λειτουργεί ο αλγόριθμος."
Και η υποσυμβολοσειρά για αναζήτηση: "substring"
- Ξεκινήστε από τη θέση 0. Συγκρίνετε
Let'με "substring". Δεν ταιριάζει. - Μετακίνηση στη θέση 1. Συγκρίνετε
et'sμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 2. Σύγκριση
t's" με "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 3. Συγκρίνετε
's sμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 4. Συγκρίνετε
seμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 5. Σύγκριση
seaμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 6. Σύγκριση
earcμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 7. Συγκρίνετε
archμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 8. Σύγκριση
rch" με "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 9. Σύγκριση
ch wμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακινηθείτε στη θέση 10. Συγκρίνετε
h wiμε το "substring". Δεν ταιριάζει. - Μετακίνηση στη θέση 11. Σύγκριση "
witμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 12. Συγκρίνετε
withμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 13. Σύγκριση
ithiμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 14. Σύγκριση
thinμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 15. Σύγκριση
hinnμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 16. Συγκρίνετε
in tμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 17. Σύγκριση
n thμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 18. Σύγκριση "
thiμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 19. Σύγκριση
thisμε "substring". Δεν ταιριάζει. - Μετακίνηση στη θέση 20. Σύγκριση
his" με "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 21. Σύγκριση
is tμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 22. Σύγκριση
s teμε "substring". Δεν ταιριάζει. - Μετακίνηση στη θέση 23. Σύγκριση
ubstμε "substring". Δεν ταιριάζει. - Μετακίνηση στη θέση 24. Σύγκριση
bstrμε "substring". Δεν ταιριάζει. - Μετακίνηση στη θέση 25. Σύγκριση
streμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 26. Σύγκριση
trinμε "υποσυμβολοσειρά". Δεν ταιριάζει. - Μετακίνηση στη θέση 27. Σύγκριση
ringμε "υποσυμβολοσειρά". Βρέθηκε ταίριασμα, θέση ρεκόρ 27.
Η υποσυμβολοσειρά "substring" βρίσκεται στη θέση 27 μέσα στο κείμενο.
Παράδειγμα κώδικα σε 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;
}
Σε αυτό το παράδειγμα, η textSearch συνάρτηση χρησιμοποιείται για την εύρεση των θέσεων της υποσυμβολοσειράς "substring" μέσα στο κείμενο. Το αποτέλεσμα θα είναι ένα διάνυσμα που θα περιέχει τις αρχικές θέσεις των αγώνων.

