Friday, 24 November 2017

C++ Program to Implement Rolling Hash


Code:

#include   iostream
#include   string
using namespace std;

const unsigned PRIME_BASE = 257;
const unsigned PRIME_MOD = 1000000007;

/*
 * Hash Function
 */
unsigned hash(const string& s)
{
    long long ret = 0;
    for (int i = 0; i < s.size(); i++)
    {
        ret = ret * PRIME_BASE + s[i];
        ret %= PRIME_MOD;
    }
    return ret;
}

/*
 * Rabin-Karp (Rolling Hash Implementation)
 */
int rabin_karp(const string& needle, const string& haystack)
{
    long long hash1 = hash(needle);
    long long hash2 = 0;
    long long power = 1;
    for (int i = 0; i < needle.size(); i++)
        power = (power * PRIME_BASE) % PRIME_MOD;

    for (int i = 0; i < haystack.size(); i++)
    {
        hash2 = hash2*PRIME_BASE + haystack[i];
        hash2 %= PRIME_MOD;

    if (i >= needle.size())
    {
            hash2 -= power * haystack[i-needle.size()] % PRIME_MOD;
            if (hash2 < 0)
                hash2 += PRIME_MOD;
        }
    if (i >= needle.size()-1 && hash1 == hash2)
            return i - (needle.size()-1);
    }

    return -1;
}

/*
 * Main Contains Menu
 */
int main()
{
    cout<<"---------------------------"<
    cout<<"Rolling Hash Implementation"<
    cout<<"---------------------------"<
    string s1,s2;
    cout<<"Enter Original String: ";
    getline(cin,s1);
    cout<<"Enter String to find: ";
    cin>>s2;
    if(rabin_karp(s2, s1) == -1)
        cout<<"String not found"<
    else
        cout<<"String "<
        return 0;
}


Output:

---------------------------
Rolling Hash Implementation
---------------------------
Enter Original String: sanfoundry
Enter String to find: o
String ofound at position 4


------------------
(program exited with code: 0)
Press return to continue



More C++ Programs:















100+ Best Home Decoration Ideas For Christmas Day 2019 To Make Home Beautiful

Best gifts for Christmas Day | Greeting cards for Christmas Day | Gift your children a new gift on Christmas day This Christmas d...