字符串哈希
本文总阅读量次
BKDRHash算法
字符串哈希,就是一种可以理解为将字符映射到一个整数的方法,即字符串会对应一个整数值。字符串哈希算法很多,在算法竞赛中,
假设字符串为
怎么去理解这个哈希函数呢?可以发现,这其实是把字符串转换为了一个
如何去计算哈希?可以采用递推的方法,采用一个数组记录字符串前i位的哈希值,例如,
- 计算前缀a的哈希值,得
,计算时间为 。 - 计算前缀ab的哈希值。
,计算时间为 。 - 计算前缀abc的哈希值。
,计算时间为 ,等等……
只需一个
计算出
ull get_hash(ull L,ull R)
{
return H[R]-H[L-1]*P[R-L+1];
}
在这里
哈希碰撞
两个字符串哈希值一样的情况(冲突)就叫哈希碰撞,为了有效避免哈希碰撞,进制
万一出现哈希碰撞过不了测试点,还可以用双哈希,双哈希指的是对字符串用两队不同的
7861-兔子与兔子
7192-Oulipo