স্ট্রিং ম্যাচিংয়ের জন্য বিটাপ অ্যালগরিদম বাস্তবায়নের জন্য এটি একটি C++ প্রোগ্রাম। অ্যালগরিদম বলে যে একটি প্রদত্ত পাঠ্যটিতে একটি সাবস্ট্রিং রয়েছে যা একটি প্রদত্ত প্যাটার্নের "প্রায় সমান", যেখানে আনুমানিক সমতা লেভেনশটাইন দূরত্বের পরিপ্রেক্ষিতে সংজ্ঞায়িত করা হয়েছে — যদি সাবস্ট্রিং এবং প্যাটার্ন একে অপরের একটি নির্দিষ্ট দূরত্ব k এর মধ্যে থাকে, তাহলে অনুযায়ী অ্যালগরিদম তারা সমান। এটি প্যাটার্নের প্রতিটি উপাদানের জন্য একটি বিট ধারণকারী বিটমাস্কের একটি সেট প্রি-কম্পিউটিংয়ের মাধ্যমে শুরু হয়। তাই আমরা বিটওয়াইজ অপারেশনগুলির সাথে বেশিরভাগ কাজ করতে সক্ষম, যেগুলি অত্যন্ত দ্রুত৷
৷অ্যালগরিদম
Begin Take the string and pattern as input. function bitmap_search() and it takes argument string text t and string pattern p : Initialize the bit array A. Initialize the pattern bitmasks, p_mask[300] Update the bit array. for i = 0 to 299 p_mask[i] = ~0 for i = 0 to m-1 p_mask[p[i]] and= ~(1L left shift i); for i = 0 to t.length()-1 A |= p_mask[t[i]]; A <<= 1; if ((A and (1L left shift m)) == 0 return i - m + 1 return -1 End
উদাহরণ কোড
#include <string> #include <map> #include <iostream> using namespace std; int bitmap_search(string t, string p) { int m = p.length(); long p_mask[300]; long A = ~1; if (m == 0) return -1; if (m >63) { cout<<"Pattern is too long!";//if pattern is too long return -1; } for (int i = 0; i <= 299; ++i) p_mask[i] = ~0; for (int i = 0; i < m; ++i) p_mask[p[i]] &= ~(1L << i); for (int i = 0; i < t.length(); ++i) { A |= p_mask[t[i]]; A <<= 1; if ((A & (1L << m)) == 0) return i - m + 1; } return -1; } void findPattern(string t, string p) { int position = bitmap_search(t, p);//initialize the position with the function bitmap_search if (position == -1) cout << "\nNo Match\n"; else cout << "\nPattern found at position : " << position; } int main(int argc, char **argv) { cout << "Enter Text:\n"; string t; cin >>t; cout << "Enter Pattern:\n"; string p; cin >>p; findPattern(t, p); }
আউটপুট
Enter Text: Tutorialspoint Enter Pattern: point Pattern found at position : 9