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

Z एल्गोरिदम


इस एल्गोरिदम का नाम Z एल्गोरिदम है क्योंकि, इस एल्गोरिदम में, हमें एक Z ऐरे बनाने की आवश्यकता होती है। Z ऐरे का आकार टेक्स्ट के आकार के समान होता है। इस ऐरे का उपयोग मुख्य स्ट्रिंग के वर्तमान कैरेक्टर से शुरू होने वाले सबसे लंबे संभावित सबस्ट्रिंग की लंबाई स्टोर करने के लिए किया जाता है। सबसे पहले, पैटर्न और मुख्य टेक्स्ट को एक विशेष सिम्बल के साथ जोड़ा जाता है जो टेक्स्ट और पैटर्न में मौजूद नहीं होता। यदि P पैटर्न है और T मुख्य टेक्स्ट है, तो जोड़ने के बाद, यह P$T होगा (यह मानते हुए कि $ P और T में मौजूद नहीं है)।

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

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

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

एल्गोरिदम

fillZArray(conStr, ZArray)

इनपुट - conStr पैटर्न और मुख्य टेक्स्ट का जोड़ा हुआ स्ट्रिंग है। ZArray सबसे लंबे संभावित सबस्ट्रिंग के इंडेक्स स्टोर करने के लिए

आउटपुट - भरा हुआ ZArray

Begin 
  n := length of conStr 
  windLeft := 0 and windRight := 0 
  for i := 1 to n, do 
    if i > windRight, then 
      windLeft := i and windRight := i 
      while windRight < n AND conStr[windRight-windLeft] = conStr[windRight], do 
        increase windRight by 1 
      done 
      ZArray[i] := windRight – windLeft 
      decrease windRight by 1 
    else 
      k := i – windLeft 
      if ZArray[k] < windRight – i +1, then 
        ZArray[i] := ZArray[k] 
      else 
        windLeft := i 
        while windRight < n AND conStr[windRight-windLeft] = conStr[windRight], do 
          increase windRight by 1 
        done 
        ZArray[i] := windRight – windLeft 
        decrease windRight by 1 
  done 
End

zAlgorithm(text, pattern)

इनपुट - मुख्य टेक्स्ट और खोजने के लिए पैटर्न

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

Begin 
  conStr = concatenate pattern + "$" + text 
  patLen := length of pattern 
  len := conStr length 
  fillZArray(conStr, ZArray) 
  for i := 0 to len – 1, do 
    if ZArray[i] = patLen, then 
      print the location i – patLen – 1 
  done 
End

उदाहरण

#include<iostream> using namespace std; void fillZArray(string conStr, int zArr[]) { int n = conStr.size(); int windLeft, windRight, k; windLeft = windRight = 0; //initially window size is 0 for(int i = 1; i < n; i++) { if(i > windRight) { windLeft = windRight = i; //window size is 0 but position to i while(windRight < n && conStr[windRight-windLeft] == conStr[windRight]) { windRight++; //extend the right bound of window } zArr[i] = windRight-windLeft; windRight--; }else { k = i-windLeft; if(zArr[k] < windRight-i+1) zArr[i] = zArr[k]; //when kth item less than remaining interval else { windLeft = i; while(windRight < n && conStr[windRight - windLeft] == conStr[windRight]) { windRight++; } zArr[i] = windRight - windLeft; windRight--; } } } } void zAlgorithm(string mainString, string pattern, int array[], int *index) { string concatedStr = pattern + "$" + mainString; //concat with special character int patLen = pattern.size(); int len = concatedStr.size(); int zArr[len]; fillZArray(concatedStr, zArr); for(int i = 0; i

आउटपुट

Pattern found at position: 4 Pattern found at position: 10 Pattern found at position: 18
  1. फोर्ड-फुल्करसन एल्गोरिदम फोर्ड-फुल्करसन एल्गोरिदम

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

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

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

  1. - डेटा स्ट्रक्चर में एल्गोरिदम विशिष्टता-परिचय

    एक एल्गोरिदम को निर्देशों के एक परिमित समूह (Finite Set of Instructions) के रूप में परिभाषित किया जाता है जिसका पालन करने पर एक विशेष कार्य पूरा होता है। सभी एल्गोरिदम निम्नलिखित मानदंडों को पूरा करना चाहिए: इनपुट (Input): एक एल्गोरिदम में शून्य या अधिक इनपुट होते हैं, जो वस्तुओं के एक निर्दिष्ट स