字符串哈希

(水)
一般来说,我们使用BKDRhash还进行字符串的哈希操作。
具体地,我们将字符串看成一个大进制数,然后取模就行了。
code:

int hash(string s)
{
    int ans=0,l=s.length();
    for(int i=0;i<l;i++)ans=(ans*base%mod+(s[i]-'0'+1))%mod;
    return ans;
}

然后就没了。
当然单哈希人品不好时会出冲突,这个时候就需要使用双哈希,取两个不同的模数。
其他部分一模一样。
code:

int hash1(string s)
{
    int ans=0,l=s.length();
    for(int i=0;i<l;i++)ans=(ans*base%mod1+(s[i]-'0'+1))%mod1;
    return ans;
}
int hash2(string s)
{
    int ans=0,l=s.length();
    for(int i=0;i<l;i++)ans=(ans*base%mod2+(s[i]-'0'+1))%mod2;
    return ans;
}
原文地址:https://www.cnblogs.com/pjykk/p/15002305.html