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

पैटर्न खोज के लिए केएमपी एल्गोरिथम के लिए सी कार्यक्रम

इस समस्या में, हमें दो स्ट्रिंग्स एक टेक्स्ट और एक पैटर्न दिया जाता है। हमारा काम पैटर्न खोज के लिए केएमपी एल्गोरिदम के लिए एक प्रोग्राम बनाना है, यह टेक्स्ट स्ट्रिंग में पैटर्न की सभी घटनाओं को ढूंढेगा।

यहां, हमें टेक्स्ट में पैटर्न की सभी घटनाओं का पता लगाना है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

text = “xyztrwqxyzfg” pattern = “xyz”

आउटपुट

Found at index 0
Found at index 7

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

हम एक सरणी बनाने के लिए पैटर्न वैंड को प्रीप्रोसेस करेंगे जिसमें पैटर्न से उचित उपसर्ग और प्रत्यय शामिल हैं जो बेमेल पैटर्न को खोजने में मदद करेंगे।

पैटर्न खोज के लिए KMP एल्गोरिथम के लिए प्रोग्राम

// पैटर्न खोज के लिए केएमपी एल्गोरिथम के लिए सी प्रोग्राम

उदाहरण

#include<iostream>
#include<string.h>
using namespace std;
void prefixSuffixArray(char* pat, int M, int* pps) {
   int length = 0;
   pps[0] = 0;
   int i = 1;
   while (i < M) {
      if (pat[i] == pat[length]) {
         length++;
         pps[i] = length;
         i++;
      } else {
         if (length != 0)
         length = pps[length - 1];
         else {
            pps[i] = 0;
            i++;
         }
      }
   }
}
void KMPAlgorithm(char* text, char* pattern) {
   int M = strlen(pattern);
   int N = strlen(text);
   int pps[M];
   prefixSuffixArray(pattern, M, pps);
   int i = 0;
   int j = 0;
   while (i < N) {
      if (pattern[j] == text[i]) {
         j++;
         i++;
      }
      if (j == M) {
         printf("Found pattern at index %d\n", i - j);
         j = pps[j - 1];
      }
      else if (i < N && pattern[j] != text[i]) {
         if (j != 0)
         j = pps[j - 1];
         else
         i = i + 1;
      }
   }
}
int main() {
   char text[] = "xyztrwqxyzfg";
   char pattern[] = "xyz";
   printf("The pattern is found in the text at the following index : \n");
   KMPAlgorithm(text, pattern);
   return 0;
}

आउटपुट

पाठ में पैटर्न निम्न अनुक्रमणिका पर पाया जाता है -

Found pattern at index 0
Found pattern at index 7

  1. हेक्सागोनल पैटर्न के लिए सी कार्यक्रम

    हमें एक पूर्णांक n दिया गया है और कार्य हेक्सागोनल पैटर्न उत्पन्न करना और अंतिम आउटपुट प्रदर्शित करना है। उदाहरण Input-: n=5 Output-: Input-: n = 4 Output-: दिए गए कार्यक्रम में हम जिस दृष्टिकोण का उपयोग कर रहे हैं वह इस प्रकार है - उपयोगकर्ता से n नंबर डालें पूरे पैटर्न को तीन भागों में विभाज

  1. सी एक समांतर चतुर्भुज की परिधि के लिए कार्यक्रम

    हमें समांतर चतुर्भुज की भुजाएँ दी गई हैं और कार्य एक समांतर चतुर्भुज की परिधि को उसके दिए गए पक्षों के साथ उत्पन्न करना और परिणाम प्रदर्शित करना है समांतर चतुर्भुज क्या है? समांतर चतुर्भुज एक प्रकार का द्विघात है जिसमें - विपरीत पक्ष समानांतर विपरीत कोण बराबर बहुभुज के विकर्ण एक दूसरे को समद्विभाज

  1. इष्टतम पृष्ठ प्रतिस्थापन एल्गोरिथम के लिए C++ प्रोग्राम

    पृष्ठ संख्या और पृष्ठ आकार दिया गया; कार्य हिट और मिस की संख्या का पता लगाना है जब हम इष्टतम पेज रिप्लेसमेंट एल्गोरिथम का उपयोग करके किसी पृष्ठ को मेमोरी ब्लॉक आवंटित करते हैं। इष्टतम पृष्ठ प्रतिस्थापन एल्गोरिथम क्या है? इष्टतम पृष्ठ प्रतिस्थापन एल्गोरिथ्म एक पृष्ठ प्रतिस्थापन एल्गोरिथ्म है। पेज