先献上代码模板:
const int INF=10000019;
unsigned int BKDHash(char *str)
{
unsigned int seed=131;
unsigned int hash1=0;
while(*str)
{
hash1=hash1*seed+(*str++);
}
return hash1%INF;
}
模可以用&x1fffff
应用1:字符串
Rabin-Karp:
出现的字符有k个用k进制数 如: acm=0*26^2+2*26^1+12;
长度不超过13时用longlong作键值类型 (用乘法冲突减少)