哈希

概念

一种映射的数据结构,可以理解为高级数组,通过一个键值查找任意一个字符串,数组,数对等

字符串哈希

基本哈希

字符串哈希实际上就是通过一个字符串各个位上的不同求出hash值,一个hash值映射一个字符串,我们可以
把字符串设为base进制(通常为131或1331),每一位代表字符串上的一个元素,通过比较两个字符串的hash值就可以快速比较两个字符串是否相同

ull hs(string x){
	int l=x.size();
	ull ans=0;
	for(int i=0;i<l;i++)
	ans=ans*b+(ull)x[i]+pr;
	return ans;
}       

这就是一个对字符串取hash值的操作,其中base一般为1331或131,pr是一个较大的质数即可(如233317)

板子

【模板】字符串哈希
代码

无冲突哈希

上述的hash求值在极端情况下hash值可能会有冲突,也就是两个不同字符串以上述算法所呈现的hash值相同,虽然出现概率极低但并非无法避免,这时候可以添加一个数组来记录每次的hash值,每次记录下新的哈希时如果与前面有冲突,就加上一个较大的质因数,直到不再冲突。当然,这种类似桶排的算法会受到空间内存的限制

多重哈希

实质上就是用两种不同的算法储存一个字符串的两个hash值,类似两个hash值坐标确定了一个字符串,可以把hash冲突的情况几乎避免掉

posted @ 2024-09-12 00:29  健康铀  阅读(27)  评论(0编辑  收藏  举报