تعد خوارزمية البحث عن النص طريقة أساسية في معالجة النصوص واسترجاع المعلومات. تسمح لنا هذه الخوارزمية بتحديد وتحديد تكرارات سلسلة فرعية(أو نمط) داخل جزء أكبر من النص.
كيف تعمل
- ابدأ بجزء أكبر من النص(أو المستند) وسلسلة فرعية للبحث عنها.
- كرر خلال كل حرف من أحرف النص بالتسلسل.
- قارن السلسلة الفرعية بجزء من النص له نفس طول السلسلة الفرعية. إذا تم العثور على تطابق ، قم بتسجيل الموضع الحالي.
- انتقل إلى الموضع التالي واستمر في المقارنة.
مثال
ضع في اعتبارك النص: "دعونا نبحث عن سلسلة فرعية داخل هذا النص لنرى كيف تعمل الخوارزمية."
والسلسلة الفرعية للبحث عن: "substring"
- ابدأ من الموضع 0. قارن
Let'مع "سلسلة فرعية". لا تطابق. - الانتقال إلى الموضع 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مع "سلسلة فرعية". لا تطابق. - الانتقال إلى الموضع 11. قارن "
witمع" سلسلة فرعية. لا يوجد تطابق. - انتقل إلى الموضع 12. قارن
withمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 13. قارن
ithiمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 14. قارن
thinمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 15. قارن
hinnمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 16. قارن
in tمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 17. قارن
n thمع "سلسلة فرعية". لا تطابق. - الانتقال إلى الموضع 18. قارن "
thiمع" سلسلة فرعية. لا يوجد تطابق. - انتقل إلى الموضع 19. قارن
thisمع "سلسلة فرعية". لا تطابق. - الانتقال إلى الموضع 20. قارن
his"مع" سلسلة فرعية. لا يوجد تطابق. - انتقل إلى الموضع 21. قارن
is tمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 22. قارن
s teمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 23. قارن
ubstمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 24. قارن
bstrمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 25. قارن
streمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 26. قارن
trinمع "سلسلة فرعية". لا تطابق. - انتقل إلى الموضع 27. قارن
ringمع "سلسلة فرعية". تم العثور على المباراة ، رقم قياسي 27.
تم العثور على السلسلة الفرعية "السلسلة الفرعية" في الموضع 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 يتم استخدام الوظيفة للعثور على مواضع "السلسلة الفرعية" ضمن النص. ستكون النتيجة متجهًا يحتوي على مواضع البداية للمباريات.

