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

C++ में स्ट्रिंग मैचिंग के लिए बिटैप एल्गोरिदम को लागू करना


यह स्ट्रिंग मैचिंग के लिए बिटैप एल्गोरिदम को लागू करने के लिए एक C++ प्रोग्राम है। एल्गोरिदम बताता है कि क्या दिया गया टेक्स्ट एक सबस्ट्रिंग समाहित करता है जो दिए गए पैटर्न के "लगभग बराबर" है, जहां अनुमानित समानता लेवेनश्टाइन दूरी के संदर्भ में परिभाषित है — यदि सबस्ट्रिंग और पैटर्न एक-दूसरे के दिए गए दूरी k के भीतर हैं, तो एल्गोरिदम के अनुसार वे समान हैं। यह पैटर्न के प्रत्येक एलिमेंट के लिए एक बिट समाहित करने वाले बिटमास्क के सेट को प्रीकंप्यूट करके शुरू होता है। इसलिए हम अधिकांश काम बिटवाइज़ ऑपरेशन्स के साथ कर सकते हैं, जो अत्यंत तेज़ हैं।

एल्गोरिदम

Begin    स्ट्रिंग और पैटर्न को इनपुट के रूप में लें।    function bitmap_search() और यह आर्गुमेंट स्ट्रिंग टेक्स्ट t और स्ट्रिंग पैटर्न p लेता है :    बिट ऐरे A को इनिशियलाइज़ करें।    पैटर्न बिटमास्क, p_mask[300] इनिशियलाइज़ करें    बिट ऐरे अपडेट करें।    for i = 0 to 299       p_mask[i] = ~0    for i = 0 to m-1       p_mask[p[i]] and= ~(1L left shift i);    for i = 0 to t.length()-1       A |= p_mask[t[i]];       A <<= 1;    if ((A and (1L left shift m)) == 0       return i - m + 1       return -1 End

उदाहरण कोड

#include <string> #include <map> #include <iostream> using namespace std; int bitmap_search(string t, string p) {    int m = p.length();    long p_mask[300];    long A = ~1;    if (m == 0)       return -1;    if (m >63) {       cout<<"Pattern is too long!";//यदि पैटर्न बहुत लंबा है       return -1;    }    for (int i = 0; i <= 299; ++i)       p_mask[i] = ~0;    for (int i = 0; i < m; ++i)       p_mask[p[i]] &= ~(1L << i);    for (int i = 0; i < t.length(); ++i) {       A |= p_mask[t[i]];       A <<= 1;       if ((A & (1L << m)) == 0)          return i - m + 1;    }    return -1; } void findPattern(string t, string p) {    int position = bitmap_search(t, p);//फंक्शन bitmap_search के साथ पोजीशन इनिशियलाइज़ करें    if (position == -1)       cout << "\nNo Match\n";    else       cout << "\nPattern found at position : " << position; } int main(int argc, char **argv) {    cout << "Enter Text:\n";    string t;    cin >>t;    cout << "Enter Pattern:\n";    string p;    cin >>p;    findPattern(t, p); }

आउटपुट

Enter Text: Tutorialspoint Enter Pattern: point Pattern found at position : 9

  1. - C++ में स्ट्रिंग ट्रांसफॉर्मेशन के लिए इन-प्लेस एल्गोरिदम

    एक दी गई स्ट्रिंग के लिए, सभी सम स्थित वाले तत्वों को स्ट्रिंग के अंत में स्थानांतरित करें। तत्वों को स्थानांतरित करते समय, सभी सम स्थित और विषम स्थित तत्वों का सापेक्ष क्रम समान रखें।उदाहरण के लिए, यदि दी गई स्ट्रिंग a1b2c3d4e5f6g7h8i9j1k2l3m4 है, तो इसे abcdefghijklm1234567891234 में इन-प्लेस और O

  1. ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम के लिए C++ प्रोग्राम ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम के लिए C++ प्रोग्राम

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

  1. - C++ प्रोग्राम: फिशर-येट्स एल्गोरिदम से ऐरे शफलिंग

    फिशर-येट्स एल्गोरिदम फिशर-येट्स एल्गोरिदम ऐरे तत्वों का यादृच्छिक क्रमपरिवर्तन उत्पन्न करता है, यानी यह ऐरे के सभी तत्वों को निष्पक्ष रूप से शफल करता है। सभी क्रमपरिवर्तन समान रूप से संभावित होते हैं। C++ प्रोग्राम उदाहरण #include <iostream> #include <cstdlib> #include <ctime> us