नुथ मॉरिस प्रैट (KMP) एक एल्गोरिथम है, जो बाएं से दाएं वर्णों की जांच करता है। जब किसी पैटर्न में एक उप-पैटर्न उप-पैटर्न में एक से अधिक दिखाई देता है, तो यह उस संपत्ति का उपयोग समय की जटिलता को बेहतर बनाने के लिए करता है, वह भी सबसे खराब स्थिति में।
KMP की समय जटिलता O(n) है।
इनपुट और आउटपुट
इनपुट:मुख्य स्ट्रिंग:"AAAAABAAAAABBBAAAAB", पैटर्न "AAAB" आउटपुट:पैटर्न स्थान पर मिला:1 पैटर्न स्थान पर मिला:7 पैटर्न स्थान पर मिला:14
एल्गोरिदम
findPrefix(pattern, m, prefArray)
इनपुट - पैटर्न, पैटर्न की लंबाई और उपसर्ग स्थान को संग्रहीत करने के लिए एक सरणी
आउटपुट - संग्रह करने के लिए सरणी जहां उपसर्ग स्थित हैं
प्रारंभ लंबाई:=0 prefArray[0] :=0 पैटर्न के सभी वर्ण अनुक्रमणिका 'i' के लिए, यदि पैटर्न[i] =पैटर्न[लंबाई] करें, तो लंबाई को 1 prefArray[i] :=लंबाई और बढ़ाएं यदि लंबाई 0 है तो लंबाई:=प्रीफ़एरे [लंबाई - 1] मैं 1 और घटाता हूं प्रीफ़एरे [i]:=0 किया गया अंत
kmpएल्गोरिदम(पाठ, पैटर्न)
इनपुट: मुख्य पाठ और पैटर्न, जिसे खोजा जाएगा
आउटपुट - वह स्थान जहाँ पैटर्न पाए जाते हैं
प्रारंभ n :=टेक्स्ट का आकार m :=पैटर्न कॉल का आकार findPrefix(pattern, m, prefArray) जबकि iउदाहरण
#शामिल करेंनेमस्पेस std का उपयोग करके;void findPrefix(string pattern, int m, int prefArray[]) { int length =0; प्रीफ़अरे [0] =0; // पहला स्थान हमेशा 0 होता है क्योंकि कोई उपसर्ग नहीं होता है (int i =1; i आउटपुट
स्थान पर पैटर्न मिला:1स्थान पर पैटर्न मिला:7स्थान पर पैटर्न मिला:14