Finite Automata का निर्माण करके, हम केवल टेक्स्ट में पैटर्न खोज कर सकते हैं। सबसे पहले, हमें परिमित ऑटोमेटा की संक्रमण तालिका बनाने के लिए एक 2D सरणी भरनी होगी। एक बार तालिका बन जाने के बाद, खोज प्रक्रिया सरल है। ऑटोमेटन की पहली अवस्था से शुरू करके, जब हम अंतिम अवस्था में पहुँचते हैं, तो इसका मतलब है कि पैटर्न स्ट्रिंग में पाया जाता है।
परिमित ऑटोमेटा निर्माण के लिए, समय जटिलता ओ (एम * के) है, एम पैटर्न की लंबाई है और के कई अलग-अलग वर्ण हैं। मुख्य पैटर्न खोज की जटिलता O(n) है।
इनपुट और आउटपुट
इनपुट:मुख्य स्ट्रिंग:"ABAAABCDBBABCDDEBCABC", पैटर्न "एबीसी" आउटपुट:स्थिति पर पाया गया पैटर्न:स्थिति पर 4 पैटर्न मिला:स्थिति पर 10 पैटर्न मिला:18
एल्गोरिदम
fillTransTable(पैटर्न, ट्रांसटेबल)
इनपुट - संक्रमण से भरने के लिए पैटर्न और संक्रमण तालिका
आउटपुट - भरी हुई ट्रांज़िशन टेबल
Begin longPS :=0 ट्रांज़िशन टेबल की सभी प्रविष्टियों को 0 ट्रांसटेबल के साथ साफ़ करें [0, पटर [0]] =1 // पैटर्न में मौजूद सभी कैरेक्टर के इंडेक्स के लिए पैटर्न के पहले कैरेक्टर के लिए, हर संभव के लिए करें वर्ण, ट्रांसटेबल करें [i, j]:=ट्रांसटेबल [लॉन्गपीएस, जे] ट्रांसटेबल [i, पैटर्न [i]] किया:=i+1 अगर मैं <पैटर्न आकार, फिर लॉन्गपीएस:=ट्रांसटेबल [लॉन्गपीएस, पैटर्न [i] ] हो गयाअंत
पैटर्न खोज (पाठ, पैटर्न)
इनपुट - मुख्य पाठ और पैटर्न
आउटपुट - सूचकांक, जहां पैटर्न पाए जाते हैं।
पेटलेन शुरू करें:=पैटर्न लंबाई strLen:=स्ट्रिंग लंबाई कॉल fillTransTable(pattern, transTable) वर्तमान:=0 सभी वर्ण की अनुक्रमणिका i टेक्स्ट के लिए, प्रस्तुत करें:=ट्रांसटेबल [वर्तमान, टेक्स्ट [i]] यदि मौजूद है =patLen , फिर स्थान प्रिंट करें (i – patLen +1) जैसा कि किया गया पैटर्न हैअंत
उदाहरण
#include#define MAXCHAR 256 नेमस्पेस एसटीडी का उपयोग कर; शून्य भरण ट्रांज़िशनटेबल (स्ट्रिंग पैटर्न, इंट ट्रांसटेबल [][MAXCHAR]) {इंट लॉन्गपीएस =0; के लिए (int i =0; i आउटपुट
पैटर्न स्थिति में मिला:4Pattern स्थिति पर मिला:10Pattern स्थिति में मिला:18