यह एल्गोरिथम कीवर्ड के सभी दिए गए सेट की सभी घटनाओं को खोजने में सहायक है। यह एक प्रकार का डिक्शनरी-मिलान एल्गोरिथम है। यह सभी कीवर्ड का उपयोग करके एक ट्री संरचना का उपयोग करता है। पेड़ बनाने के बाद, यह खोज को रैखिक समय में बनाने के लिए पेड़ को एक ऑटोमेटन के रूप में बदलने की कोशिश करता है। अहो-कोरासिक एल्गोरिथम के तीन अलग-अलग चरण हैं।
ये हैं गो-टू, विफलता, और आउटपुट . गो-टू स्टेज में, यह सभी कीवर्ड का उपयोग करके ट्री बनाता है। अगले चरण में या विफलता चरण में, यह कुछ खोजशब्दों का उचित प्रत्यय प्राप्त करने के लिए पिछड़े संक्रमण को खोजने का प्रयास करता है। आउटपुट चरण में, automaton के प्रत्येक राज्य 's' के लिए, यह उन सभी शब्दों को ढूंढता है जो राज्य 's' पर समाप्त होते हैं।
इस एल्गोरिदम की समय जटिलता है:ओ (एन + एल + जेड), जहां एन टेक्स्ट की लंबाई है, एल कीवर्ड की लंबाई है और जेड कई मिलान है।
इनपुट और आउटपुट
इनपुट:पैटर्न का एक सेट:{उनके, वहां, उत्तर, कोई भी, अलविदा}मुख्य स्ट्रिंग:"ishereanyanswerokgoodbye"आउटपुट:वर्ड देयर लोकेशन:2वर्ड एनी लोकेशन:7वर्ड आंसर लोकेशन:10वर्ड बाय लोकेशन:22
एल्गोरिदम
बिल्डट्री(पैटर्नसूची, आकार)
इनपुट - सभी पैटर्न की सूची, और सूची का आकार
आउटपुट - पैटर्न खोजने के लिए ट्रांज़िशन मैप जेनरेट करें
आउटपुट सरणी के सभी तत्वों को 0 पर सेट करना शुरू करें, असफल सरणी के सभी तत्वों को -1 पर सेट करें, गोटो मैट्रिक्स के सभी तत्वों को -1 राज्य पर सेट करें:=1 // पहले तो केवल एक ही स्थिति है। पैटर्न सूची में सभी पैटर्न 'i' के लिए, शब्द करें:=पैटर्न सूची [i] वर्तमान:=0 शब्द के सभी वर्ण 'ch' के लिए, यदि गोटो [वर्तमान, ch] =-1 तो गोटो [वर्तमान, ch] करें:=राज्य राज्य:=राज्य + 1 वर्तमान:=गोटो [वर्तमान, सीएच] किया गया आउटपुट [वर्तमान]:=आउटपुट [वर्तमान] या (मैं समय के लिए 1 बाईं ओर शिफ्ट) सभी प्रकार के पात्रों के लिए किया गया है, अगर गोटो [0 , ch] 0 फिर विफल [गोटो [0, ch]]:=0 एक कतार q में गोटो [0, ch] डालें। किया गया जबकि q खाली नहीं है, करें newState :=q का पहला तत्व q से हटा दें। सभी संभावित चरित्र ch के लिए, अगर गोटो [न्यूस्टेट, सीएच] ≠ -1 फिर विफलता:=असफल [न्यूस्टेट] जबकि गोटो [विफलता, सीएच] =-1, विफलता करें:=गोटो [विफलता, सीएच] विफल हो गया [गोटो [न्यूस्टेट, सीएच]] =विफलता आउटपुट [गोटो [न्यूस्टेट, सी]]:=आउटपुट [गोटो [न्यूस्टेट, सी]] या आउटपुट [विफलता] गोटो [न्यूस्टेट, सीएच] को क्यू में डालें। किया हुआ वापसी की स्थितिअंत
गेटनेक्स्टस्टेट (वर्तमान स्थिति, अगला चार)
इनपुट − वर्तमान राज्य और अगला चरित्र अगले राज्य को निर्धारित करने के लिए
आउटपुट : अगला राज्य
उत्तर शुरू करें:=presentState ch:=nextChar जबकि goto[answer, ch] =-41, do answer :=fail[answer] किया गया रिटर्न गोटो[answer, ch]End
पैटर्न खोज (पैटर्न सूची, आकार, टेक्स्ट)
>इनपुट - पैटर्न की सूची, सूची का आकार और मुख्य पाठ
आउटपुट - टेक्स्ट के इंडेक्स जहां पैटर्न पाए जाते हैं
कॉल बिल्डट्री (पैटर्नलिस्ट, आकार) प्रेजेंटस्टेट:=0 टेक्स्ट के सभी इंडेक्स के लिए शुरू करें, अगर आउटपुट [प्रेजेंटस्टेट] =0 अगले भाग को अनदेखा करें और पैटर्न लिस्ट में सभी पैटर्न के लिए अगले पुनरावृत्ति के लिए जाएं, अगर पैटर्न मिला तो करें आउटपुट ऐरे का उपयोग करके, फिर उस स्थान को प्रिंट करें जहां पैटर्न मौजूद है किया हुआ समाप्त करेंउदाहरण
#शामिल#शामिल करें ]; int gotoMat[MAXS][MAXC];int buildTree(string array[], int size) { for(int i =0; i क्यू; के लिए (int ch =0; ch आउटपुट
वर्ड देयर लोकेशन:2वर्ड एनी लोकेशन:7वर्ड आंसर लोकेशन:10वर्ड बाय लोकेशन:22