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

राबिन-कार्प एल्गोरिथम


राबिन-कार्प एक और पैटर्न है जो अधिक कुशल तरीके से पैटर्न खोजने के लिए एल्गोरिदम खोज रहा है। यह विंडो को एक-एक करके ले जाकर पैटर्न की जांच भी करता है, लेकिन सभी मामलों के लिए सभी वर्णों की जांच किए बिना, यह हैश मान पाता है। जब हैश मान का मिलान किया जाता है, तभी यह प्रत्येक वर्ण की जाँच करने का प्रयास करता है। यह प्रक्रिया एल्गोरिथम को अधिक कुशल बनाती है।

समय जटिलता O(m+n) है, लेकिन सबसे खराब स्थिति के लिए, यह O(mn) है।

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

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

एल्गोरिदम

rabinKarpSearch(text, pattern, prime)

इनपुट - मुख्य पाठ और पैटर्न। हैश स्थान खोजने का एक और अभाज्य संख्या

आउटपुट - वह स्थान जहाँ पैटर्न पाए जाते हैं

पेटलेन शुरू करें:=पैटर्न लंबाई strLen:=स्ट्रिंग लंबाई patHash:=0 और strHash:=0, h:=1 maxChar:=पैटर्न में सभी वर्णों के सूचकांक i के लिए वर्ण सेट में वर्णों की कुल संख्या, h करें:=(h*maxChar) मॉड प्राइम सभी कैरेक्टर इंडेक्स i पैटर्न के लिए किया गया, patHash करें:=(maxChar*patHash + pattern[i]) mod prime strHash:=(maxChar*strHash + text[i]) mod prime के लिए किया गया i:=0 से (strLen - patLen), यदि patHash =strHash करें, तो charIndex के लिए:=0 से patLen -1, यदि टेक्स्ट [i + charIndex] पैटर्न [charIndex] करें, तो लूप को तोड़ दें यदि charIndex =patLen, फिर स्थान i को i स्थिति में पाए गए पैटर्न के रूप में प्रिंट करें। अगर मैं <(strLen - patLen), तो strHash :=(maxChar*(strHash - text[i]*h)+text[i+patLen]) mod prime, तो अगर strHash <0, तो strHash :=strHash + prime किया समाप्त

उदाहरण

#include#define MAXCHAR 256नेमस्पेस std का उपयोग करके; void rabinKarpSearch(string mainString, string pattern, int prime, int array[], int *index) { int patLen =pattern.size (); int strLen =mainString.size (); int charIndex, pattHash =0, strHash =0, h =1; for(int i =0; i 

आउटपुट

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

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

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

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

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

  1. C++ में Z एल्गोरिथम (रैखिक समय पैटर्न खोज एल्गोरिथम)

    Z एल्गोरिथम रैखिक समय में एक स्ट्रिंग में एक पैटर्न की घटना को खोजने के लिए प्रयोग किया जाता है। मान लीजिए यदि स्ट्रिंग की लंबाई n है और खोजे जाने वाले पैटर्न का आकार m है, तो हल करने में लगने वाला समय O(m+n) के क्रम का होगा। । z-एल्गोरिदम एक पैटर्न की घटना को खोजने के लिए एक Z सरणी का उपयोग करता ह