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

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

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

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

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

इनपुट

text = “xyztrwqxyzfg” pattern = “xyz”

आउटपुट

Found at index 0
Found at index 7

यहां, हम राबिन-कार्प एल्गोरिथम का उपयोग करके समस्या के समाधान पर चर्चा करेंगे। इस एल्गोरिथ्म में, हम स्ट्रिंग में पैटर्न के आकार की एक विंडो लेते हैं और इसे एक-एक करके स्लाइड करते हैं और इसे पैटर्न के हैश मान से मिलाते हैं। और अगर हैश-वैल्यू मैच होता है तो हम जांच करेंगे कि पैटर्न के अलग-अलग कैरेक्टर स्ट्रिंग के साथ मेल खाते हैं या नहीं।

राबिन-कार्प के लिए टेक्स्ट और पैटर्न का हैश-वैल्यू महत्वपूर्ण है, पैटर्न के निर्माण के लिए हम प्रत्येक के लिए कैरेक्टर का संख्यात्मक मान जोड़ेंगे

स्ट्रिंग और हैश के चरित्र को मान को छोटा करने के लिए इसे एक अभाज्य संख्या से विभाजित करके माना जाएगा।

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

// पैटर्न खोज के लिए राबिन-कार्प एल्गोरिथम के लिए कार्यक्रम

उदाहरण

#include <stdio.h>
#include <string.h>
#define c 256
void search(char pattern[], char text[]){
   int M = strlen(pattern);
   int N = strlen(text);
   int i, j;
   int hashP = 0;
   int hashT = 0;
   int h = 1;
   for (i = 0; i < M - 1; i++)
   h = (h * c) % 103;
   for (i = 0; i < M; i++) {
      hashP = (c * hashP + pattern[i]) % 103;
      hashT = (c * hashT + text[i]) % 103;
   }
   for (i = 0; i <= N - M; i++) {
      if (hashP == hashT) {
         for (j = 0; j < M; j++) {
            if (text[i + j] != pattern[j])
            break;
         }
         if (j == M)
         printf("Pattern found at index %d \n", i);
      }
      if (i < N - M) {
         hashT = (c * (hashT - text[i] * h) + text[i + M]) % 103;
         if (hashT < 0)
            hashT = (hashT + 103);
      }
   }
}
int main(){
   char text[] = "xyztrwqxyzfg";
   char pattern[] = "xyz";
   printf("The pattern is found in the text at the following index : \n");
   search(pattern, text);
   return 0;
}

आउटपुट

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

Pattern found at index 0
Pattern found at index 7

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

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

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

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

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

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