স্ট্রিং সার্চ অ্যালগরিদম একটি বৃহত্তর পাঠ্যের(স্ট্রিং) মধ্যে একটি নির্দিষ্ট প্যাটার্ন(সাবস্ট্রিং) এর ঘটনাগুলি খুঁজে পেতে ব্যবহৃত হয়। এই অ্যালগরিদম পাঠ্য প্রক্রিয়াকরণ, অনুসন্ধান এবং ম্যানিপুলেশন কাজগুলিতে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।
কিভাবে এটা কাজ করে
- অনুসন্ধান করার জন্য একটি পাঠ্য(স্ট্রিং) এবং একটি প্যাটার্ন(সাবস্ট্রিং) দিয়ে শুরু করুন।
- এক সময়ে একটি অক্ষর টেক্সট মাধ্যমে পুনরাবৃত্তি করুন.
- পাঠ্যের প্রতিটি অক্ষরের জন্য, প্যাটার্নের প্রথম অক্ষরের সাথে এটি তুলনা করুন।
- একটি মিল থাকলে, পরবর্তী অক্ষরগুলিও প্যাটার্নের সাথে মেলে কিনা তা পরীক্ষা করুন।
- যদি প্যাটার্নটি সম্পূর্ণভাবে মিলে যায় তবে ম্যাচের শুরুর অবস্থানটি রেকর্ড করুন।
- পাঠ্যের প্যাটার্নের জন্য অনুসন্ধান চালিয়ে যান।
উদাহরণ
একটি পাঠ্য বিবেচনা করুন: "ababcababcabcabc" এবং একটি প্যাটার্ন: "abc"
- অবস্থান 0 থেকে শুরু করুন। প্যাটার্নের প্রথম অক্ষর "a" এর সাথে "a" এর তুলনা করুন।
- মিল পাওয়া গেছে, পরবর্তী অক্ষরে যান: "b" এর সাথে "b" এবং "c" এর সাথে "a"।
- মিলে যাওয়া চালিয়ে যান: "a" এর সাথে "b", "b" এর সাথে "a" এবং "c" এর সাথে "b"।
- পজিশন 2 এ ম্যাচ ব্যর্থ হয়েছে।
- অবস্থান 3 থেকে আবার শুরু করুন। প্যাটার্নের প্রথম অক্ষর "a" এর সাথে "a" এর তুলনা করুন।
- সফল মিল: "a" এর সাথে "a", "b" এর সাথে "b", এবং "c" এর সাথে "c"।
- রেকর্ড অবস্থান 3.
"abc" প্যাটার্নটি 0, 6, এবং 9 অবস্থানে পাওয়া যায়।
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;
}
এই উদাহরণে, stringSearch
ফাংশনটি "ababcababcabcabc" পাঠ্যের মধ্যে "abc" প্যাটার্নের ঘটনাগুলি খুঁজে পেতে ব্যবহৃত হয়। ফলাফলটি ম্যাচের শুরুর অবস্থান ধারণকারী একটি ভেক্টর হবে।