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

C++ में रोलिंग हैश का कार्यान्वयन


रोलिंग हैश एक हैश फ़ंक्शन है जिसमें इनपुट को एक विंडो में हैश किया जाता है जो इनपुट के माध्यम से चलती है।

रैबिन-कार्प रोलिंग हैश का एक लोकप्रिय अनुप्रयोग है। रैबिन और कार्प द्वारा प्रस्तावित रोलिंग हैश फ़ंक्शन एक पूर्णांक मान की गणना करता है। एक स्ट्रिंग के लिए पूर्णांक मान स्ट्रिंग का संख्यात्मक मान होता है।

रैबिन-कार्प स्ट्रिंग खोज एल्गोरिथम को अक्सर एक बहुत ही सरल रोलिंग हैश फ़ंक्शन का उपयोग करके समझाया जाता है जो केवल गुणन और जोड़ का उपयोग करता है -

H=c1ak-1+c2ak-2+….+ cka0.

जहां, a एक स्थिरांक है, और c1, c2...ck इनपुट वर्ण हैं। H के विशाल मान को संभालने के लिए, mod n किया जाता है।

एल्गोरिथम

Begin    Declare a constant variable P_B of the integer datatype.       Initialize P_B= 227.    Declare a constant variable P_M of the integer datatype.       Initialize P_M= 1000005.    Declare a hash() function       Pass a string s as parameter.       Declare r of the integer datatype.          Initialize r = 0.       for (int i = 0; i < s.size(); i++)          r = r* P_B + s[i]          r %= P_M       return r    Declare function rabin_karp(const string& n, const string& hstack)       Declare h1 of the integer datatype.          Initialize h1 = hash(n).       Declare h2 of the integer datatype.          Initialize h2 = 0.       Declare power of the integer datatype.          Initialize power = 1.       for (int i = 0; i < n.size(); i++)          power = (power * P_B) % P_M       for (int i = 0; i < hstack.size(); i++)          h2 = h2*P_B + hstack[i]          h2 %= P_M          if (i >= n.size())             h2 -= power * hstack[i-n.size()] % P_M             if (h2 < 0)                h2 += P_M          if (i >= n.size()-1 && h1 == h2)             return i - (n.size()-1);       return -1;    Declare s1 and s2 to the string type.    Print “Enter Input String:”    Call getline(line, s1) to enter the string.    Print “Enter string to find:”    Take input for s2.    if(rabin_karp(s2, s1) == -1)       print” String not found”    else       print the string. End.

उदाहरण कोड

#include <iostream> #include <string> using namespace std; const int P_B= 227; const int P_M = 1000005; int hash(const string& s) {    int r = 0;    for (int i = 0; i < s.size(); i++) {       r = r* P_B + s[i];       r %= P_M;    }    return r; } int rabin_karp(const string& n, const string& hstack) {    int h1 = hash(n);    int h2 = 0;    int power = 1;    for (int i = 0; i < n.size(); i++)       power = (power * P_B) % P_M;    for (int i = 0; i < hstack.size(); i++) {       h2 = h2*P_B + hstack[i];       h2 %= P_M;       if (i >= n.size()) {          h2 -= power * hstack[i-n.size()] % P_M;          if (h2 < 0)             h2 += P_M;       }       if (i >= n.size()-1 && h1 == h2)          return i - (n.size()-1);    }    return -1; } int main() {    string s1, s2;    cout<<"Enter Input String: ";    getline(cin, s1);    cout<<"Enter String to find: ";    cin>>s2;    if(rabin_karp(s2, s1) == -1)       cout<<"String not found"<<endl;    else       cout<<"String"<<" "<<s2<<” “<<"found at position "<<rabin_karp(s2, s1)<<endl;    return 0; }

आउटपुट

Enter Input String: Tutorialspoint Enter String to find: a String a found at position 6 Enter Input String: Tutorialspoint Enter String to find: b String not found

  1. C++ में सीजर सिफर (Caesar Cipher) का कार्यान्वयन C++ में सीजर सिफर (Caesar Cipher) का कार्यान्वयन

    यह एक मोनो-अल्फाबेटिक सिफर है जिसमें प्लेनटेक्स्ट के प्रत्येक अक्षर को दूसरे अक्षर द्वारा प्रतिस्थापित किया जाता है ताकि सिफरटेक्स्ट बन सके। यह सब्स्टीट्यूशन सिफर योजना का सबसे सरल रूप है। इस क्रिप्टोसिस्टम को आमतौर पर शिफ्ट सिफर के रूप में संदर्भित किया जाता है। अवधारणा प्रत्येक अल्फाबेट को दूसरे

  1. C++ में AVL ट्री को लागू करना C++ में AVL ट्री को लागू करना

    AVL ट्री एक सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री है जहां सभी नोड्स के लिए बाएं और दाएं सबट्री की ऊंचाई का अंतर एक से अधिक नहीं हो सकता।ट्री रोटेशन एक ऑपरेशन है जो AVL ट्री पर एलिमेंट्स के क्रम में हस्तक्षेप किए बिना स्ट्रक्चर को बदलता है। यह ट्री में एक नोड को ऊपर ले जाता है और एक नोड को नीचे। इसका उपयो

  1. C++ STL में Set_Symmetric_Difference का कार्यान्वयन C++ STL में Set_Symmetric_Difference का कार्यान्वयन

    यह C++ प्रोग्राम set_symmetric_difference को लागू करने के लिए है। दो सेट का सिमेट्रिक डिफरेंस उन तत्वों द्वारा बनाया जाता है जो एक सेट में मौजूद होते हैं, लेकिन दूसरे में नहीं। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या Exclusive-OR Set Difference या Subtraction