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

नुथ-मॉरिस-प्रैट एल्गोरिदम


नुथ मॉरिस प्रैट (KMP) एक एल्गोरिदम है, जो कैरेक्टर को बाएं से दाएं चेक करता है। जब एक पैटर्न में एक सब-पैटर्न सब-पैटर्न में एक से अधिक बार प्रकट होता है, तो यह उस गुण का उपयोग समय जटिलता में सुधार के लिए करता है, सबसे खराब स्थिति के लिए भी।

KMP की समय जटिलता O(n) है।

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

इनपुट: मुख्य स्ट्रिंग: "AAAABAAAAABBBAAAAB", पैटर्न "AAAB" आउटपुट: पैटर्न स्थान पर मिला: 1 पैटर्न स्थान पर मिला: 7 पैटर्न स्थान पर मिला: 14

एल्गोरिदम

findPrefix(pattern, m, prefArray)

इनपुट - पैटर्न, पैटर्न की लंबाई और प्रीफिक्स स्थान स्टोर करने के लिए एक ऐरे

आउटपुट - वह ऐरे जहां प्रीफिक्स स्थित हैं

Begin 
  length := 0 
  prefArray[0] := 0 
  for all character index 'i' of pattern, do 
    if pattern[i] = pattern[length], then 
      increase length by 1 
      prefArray[i] := length 
    else 
      if length ≠ 0 then 
        length := prefArray[length - 1] 
        decrease i by 1 
      else 
        prefArray[i] := 0 
  done 
End

kmpAlgorithm(text, pattern)

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

आउटपुट - वह स्थान जहां पैटर्न मिले

Begin 
  n := size of text 
  m := size of pattern 
  call findPrefix(pattern, m, prefArray) 
  while i < n, do 
    if text[i] = pattern[j], then 
      increase i and j by 1 
    if j = m, then 
      print the location (i-j) as there is the pattern 
      j := prefArray[j-1] 
    else if i < n AND pattern[j] ≠ text[i] then 
      if j ≠ 0 then 
        j := prefArray[j - 1] 
      else 
        increase i by 1 
  done 
End

उदाहरण

#include<iostream> using namespace std; void findPrefix(string pattern, int m, int prefArray[]) { int length = 0; prefArray[0] = 0; //first place is always 0 as no prefix for(int i = 1; i

आउटपुट

Pattern found at location: 1 Pattern found at location: 7 Pattern found at location: 14
  1. फोर्ड-फुल्करसन एल्गोरिदम फोर्ड-फुल्करसन एल्गोरिदम

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

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

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

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

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