Finite Automata নির্মাণ করে, আমরা সহজভাবে পাঠ্যগুলিতে প্যাটার্ন অনুসন্ধান করতে পারি। প্রথমে, সীমিত স্বয়ংক্রিয়তার রূপান্তর টেবিল তৈরি করতে আমাদের একটি 2D অ্যারে পূরণ করতে হবে। একবার টেবিল তৈরি হয়ে গেলে, অনুসন্ধান পদ্ধতিটি সহজ। অটোমেটনের প্রথম অবস্থা থেকে শুরু করে, যখন আমরা চূড়ান্ত অবস্থায় পৌঁছাই, এর মানে হল যে প্যাটার্নটি স্ট্রিংটিতে পাওয়া যায়।
সসীম স্বয়ংক্রিয় নির্মাণের জন্য, সময়ের জটিলতা হল O(M*K), M হল প্যাটার্নের দৈর্ঘ্য এবং K হল বিভিন্ন অক্ষরের সংখ্যা। প্রধান প্যাটার্ন অনুসন্ধানের জটিলতা হল O(n).
ইনপুট এবং আউটপুট
ইনপুট:প্রধান স্ট্রিং:“ABAAABCDBBABCDDEBCABC”, প্যাটার্ন “ABC”আউটপুট:অবস্থানে প্যাটার্ন পাওয়া গেছে:অবস্থানে 4 প্যাটার্ন পাওয়া গেছে:10 অবস্থানে প্যাটার্ন পাওয়া গেছে:18
অ্যালগরিদম
FillTransTable(প্যাটার্ন, transTable)
ইনপুট - প্যাটার্ন এবং ট্রানজিশন সারণী যা ট্রানজিশন দিয়ে পূরণ করতে হবে
আউটপুট - ভরা ট্রানজিশন টেবিল
Begin longPS :=0 transTable[0, patter[0]] দিয়ে ট্রানজিশন টেবিলের সমস্ত এন্ট্রি সাফ করুন =1 // প্যাটার্নে উপস্থিত সমস্ত ক্যারেক্টারের সূচকের জন্য প্যাটার্নের প্রথম অক্ষরের জন্য, সব সম্ভবের জন্য করুন অক্ষর, transTable[i,j] :=transTable[longPS, j] সম্পন্ন transTable[i, pattern[i]] :=i+1 যদি i <প্যাটার্ন সাইজ, তারপর longPS :=transTable[longPS, pattern[i] ] সম্পন্ন শেষ
প্যাটার্ন অনুসন্ধান৷ (টেক্সট, প্যাটার্ন)
ইনপুট - মূল পাঠ্য এবং প্যাটার্ন
আউটপুট - সূচী, যেখানে নিদর্শন পাওয়া যায়।
Begin patLen :=pattern length strLen :=string length call fillTransTable(pattern, transTable) present :=0 সব ক্যারেক্টারের ইনডেক্স i টেক্সটের জন্য, do present :=transTable[present, text[i]] যদি বর্তমান =patLen , তারপর অবস্থানটি প্রিন্ট করুন (i – patLen +1) যেমন প্যাটার্ন সম্পন্ন হয়েছেউদাহরণ
#include#define MAXCHAR 256 useing namespace std;void fillTransitionTable(string pattern, int transTable[][MAXCHAR]) { int longPS =0; জন্য (int i =0; i আউটপুট
পজিশনে প্যাটার্ন পাওয়া গেছে:4পজিশনে প্যাটার্ন পাওয়া গেছে:10পজিশনে প্যাটার্ন পাওয়া গেছে:18