Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> प्रोग्रामिंग

बॉयर मूर एल्गोरिथम


यह बॉयर मूर एल्गोरिथम का एक और तरीका है। कभी-कभी इसे गुड प्रत्यय अनुमानी पद्धति कहा जाता है। इस स्थिति के लिए, प्रत्यय तालिका के रूप में एक प्रीप्रोसेसिंग तालिका बनाई जाती है। इस प्रक्रिया में, पैटर्न के अंतिम वर्ण से सबस्ट्रिंग या पैटर्न की खोज की जाती है। जब मुख्य स्ट्रिंग का एक सबस्ट्रिंग पैटर्न के सबस्ट्रिंग के साथ मेल खाता है, तो यह मिलान किए गए सबस्ट्रिंग की अन्य घटनाओं को खोजने के लिए आगे बढ़ता है। यह पैटर्न के उपसर्ग को खोजने के लिए भी आगे बढ़ सकता है जो मुख्य स्ट्रिंग का प्रत्यय है। अन्यथा, यह पैटर्न की पूरी लंबाई को हिला देता है।

इनपुट और आउटपुट

इनपुट:मुख्य स्ट्रिंग:"ABAAABCDBBABCDDEBCABC", पैटर्न:"एबीसी" आउटपुट:स्थिति पर पाया गया पैटर्न:स्थिति पर 4 पैटर्न मिला:स्थिति पर 10 पैटर्न मिला:18

एल्गोरिदम

fullSuffixMatch(shiftArray, BorderArray, पैटर्न)

इनपुट - शिफ्ट स्थानों, सीमा सरणी और खोज के पैटर्न को संग्रहीत करने के लिए सरणी।

आउटपुट - शिफ्ट ऐरे और बॉर्डर ऐरे को भरें।

शुरू करें n:=पैटर्न लंबाई j :=n j :=n+1 borderArray[i] :=j जबकि i> 0, do जबकि j <=n और पैटर्न[i-1] पैटर्न[j-1] , अगर शिफ्टअरे [जे] =0 करें, तो शिफ्टअरे [जे]:=जे-आई; जे:=सीमाअरे [जे]; किया गया i और j को 1 सीमा से घटानाअरे [i] :=j किया गयाअंत

आंशिक प्रत्यय मैच (शिफ्टअरे, बॉर्डरअरे, पैटर्न)

इनपुट- शिफ्ट स्थानों, सीमा सरणी और खोज के पैटर्न को संग्रहीत करने के लिए सरणी।

आउटपुट - शिफ्ट ऐरे और बॉर्डर ऐरे को भरें।

प्रारंभ n :=पैटर्न लंबाई j :=borderArray[0] पैटर्न के सभी वर्णों 'i' की अनुक्रमणिका के लिए, यदि ShiftArray[i] =0 करें, तो ShiftArray[i] :=j यदि i =j तो j करें :=सीमाअरे [j] किया गयाअंत

खोज पैटर्न (पाठ, पैटर्न)

इनपुट: मुख्य पाठ और पैटर्न, जिसे खोजा जाएगा

आउटपुट - इंडेक्स जहां पैटर्न पाया जाता है

पेटलेन शुरू करें:=पैटर्न लंबाई strLen:=शिफ्टअरे की सभी प्रविष्टियों के लिए टेक्स्ट आकार, सभी प्रविष्टियों को 0 पूर्ण कॉल पर सेट करें पूर्ण प्रत्यय मैच (शिफ्टअरे, सीमाअरे, पैटर्न) कॉल आंशिक प्रत्यय मैच (शिफ्टअरे, सीमाअरे, पैटर्न) शिफ्ट:=0 जबकि शिफ्ट <=(strLen - patLen), j करें:=patLen -1 जबकि j> =0 और पैटर्न [j] =टेक्स्ट [शिफ्ट + j], j को 1 से घटाएं यदि j <0 है, तो शिफ्ट को प्रिंट करें , एक मैच शिफ्ट है:=शिफ्ट + शिफ्टअरे [0] और शिफ्ट:=शिफ्ट + शिफ्टअरे [जे + 1] किया गया अंत 

उदाहरण

#शामिल करेंनेमस्पेस std का उपयोग करना;void fullSuffixMatch(int shiftArr[], int BorderArr[], string pattern) { int n =pattern.size (); // पैटर्न की लंबाई पाएं int i =n; इंट जे =एन+1; बॉर्डरएआर [i] =जे; जबकि (i> 0) {// सही खोजें जब (i-1)वें और (j-1)वें आइटम समान न हों जबकि (j <=n &&पैटर्न [i-1]! =पैटर्न [j-1] ) { अगर (शिफ्टएआर [जे] ==0) शिफ्टएआर [जे] =जे-आई; // i से j j पर शिफ्ट पैटर्न =BorderArr [j]; // अद्यतन सीमा } मैं--; जे--; बॉर्डरएआर [i] =जे; } }शून्य आंशिक प्रत्यय मैच (इंट शिफ्टएआर [], इंट बॉर्डरएआर [], स्ट्रिंग पैटर्न) {इंट एन =पैटर्न। आकार (); // पैटर्न की लंबाई खोजें int j; जे =बॉर्डरएआर [0]; for(int i =0; i =0 &&पैटर्न [जे] ==मेनस्ट्रिंग [शिफ्ट + जे]) {जे--; // j को कम करें जब पैटर्न और मुख्य स्ट्रिंग वर्ण मेल खा रहे हों } if(j <0) {(*index)++; सरणी [(* अनुक्रमणिका)] =शिफ्ट; शिफ्ट + =शिफ्टअरे [0]; } और {शिफ्ट + =शिफ्टअरे [जे + 1]; } }}इंट मेन () {स्ट्रिंग मेनस्ट्रिंग ="एबीएएएबीसीडीबीबीएबीसीडीडीईबीसीएबीसी"; स्ट्रिंग पैटर्न ="एबीसी"; int locArray [mainString.size ()]; इंट इंडेक्स =-1; सर्चपैटर्न (मेनस्ट्रिंग, पैटर्न, लोकअरे, और इंडेक्स); for(int i =0; i <=index; i++) { cout <<"पैटर्न स्थिति पर पाया गया:" < 

आउटपुट

पैटर्न स्थिति में मिला:4Pattern स्थिति पर मिला:10Pattern स्थिति में मिला:18

  1. फोर्ड फुलकर्सन एल्गोरिथम

    फोर्ड-फुलकर्सन एल्गोरिथम का उपयोग किसी दिए गए ग्राफ में प्रारंभ शीर्ष से सिंक शीर्ष तक अधिकतम प्रवाह का पता लगाने के लिए किया जाता है। इस ग्राफ में हर किनारे की क्षमता है। स्रोत और सिंक नाम के दो शीर्ष दिए गए हैं। स्रोत शीर्ष में सभी बाहरी किनारे हैं, कोई अंदरूनी किनारा नहीं है, और सिंक में सभी अंदर

  1. फ्लोयड वारशाल एल्गोरिथम

    Floyd-Warshall एल्गोरिदम का उपयोग किसी दिए गए भारित ग्राफ से सभी जोड़ी सबसे छोटी पथ समस्या को खोजने के लिए किया जाता है। इस एल्गोरिथम के परिणामस्वरूप, यह एक मैट्रिक्स उत्पन्न करेगा, जो ग्राफ़ में किसी भी नोड से अन्य सभी नोड्स के लिए न्यूनतम दूरी का प्रतिनिधित्व करेगा। सबसे पहले, आउटपुट मैट्रिक्स

  1. पैटर्न खोज के लिए परिमित ऑटोमेटा एल्गोरिथम के लिए C++ प्रोग्राम

    इस लेख में, हम पैटर्न खोज के लिए परिमित ऑटोमेटा एल्गोरिदम को निष्पादित करने के लिए एक कार्यक्रम पर चर्चा करेंगे। हमें एक टेक्स्ट [0...n-1] और एक पैटर्न [0...m-1] प्रदान किया जाता है। हमें टेक्स्ट [] में पैटर्न [] की सभी घटनाओं को खोजना होगा। इसके लिए हम टेक्स्ट [] को प्रीप्रोसेस करेंगे और इसका प्र