字符串哈希
Summary
字符串哈希把字符串映射成一个整数,使字符串比较从逐字符降到 O(1)。常用多项式哈希:把串看作 base 进制数、对大质数取模,配合前缀哈希可在 O(1) 内取出任意子串的哈希值,从而快速判断两段子串是否相等。取较大的底数与大质数模数能降低不同串映射到同一值的冲突概率。实现给出一个以无符号长整型自然溢出、底数取 131 的哈希函数,可直接用于比较、去重与匹配。
参考资料
简介
字符串哈希(String Hashing)把字符串映射成一个整数,使字符串比较降到 。常用多项式哈希:把串看作 进制数,。配合前缀哈希可 取出任意子串的哈希值。取大质数模数与较大底数可降低冲突概率。
实现
using ull=unsigned long long;
const int base=131;
const ull mod=212370440130137957;
ull get_hash(string s)
{
ull res=0;
for(int i=0;i<s.size();i++)
{
res=(res*base+s[i])%mod;
}
return res;
}