哈希
简而言之,字符串哈希——字符串到整数的唯一映射
哈希只能加密不能解密,所以我们实质上要建立的是一个 单射,即能通过一个字符串得到一个唯一的数。
我们所常用的哈希是进制哈希:给出一个固定进制的数base,将一个字符串的
每一个元素看做一个进制位上的数字,所以这个字符串就可以看成一个base进制的数。而这个数就称为这个字符串的哈希值。那么在判断字符串是否相同时,只需要判断它们的哈希值是否相同即可。
可以类比map的吧,如果不可以当我没说
哈希冲突
哈希是通过对数据进行再压缩,从而提高效率的一种解决方法。但由于哈希值是有限的,所以可能有不同的字符串对应了同一哈希值,这样就发生了哈希冲突。
哈希函数
定义哈希函数:unsigned long long hash[i]
有:Hash[i] = Hash[i-1] * p + idx(s[i])
自然溢出方法
unsigned long long在大于等于(2^{64}+1)时会自动对(2^{64}+1)取模
单哈希
Hash[i] = Hash[i-1] * p + idx(s[i])%mod
p,mod都为质数,且p<mod,mod取极大时冲突很小
双哈希
将字符串用不同mod哈希两次,结果用二元组表示
Hash1[i] = (Hash1[i-1]p+idx(si))%mod
Hash2[i] = (Hash2[i-1]p+idx(si))%mod
Hash[i]:<Hash1[i],Hash2[i]>
这个方法很安全