Hash

思想:把字符串变成数值比较。

我们选取这个 hash 公式:

hash(s)=i=1lensi×pleni(mod M)

hash方法

自然溢出hash

我们使用

unsigned long long hash[N];

hash[k])来存储一个字符串下标 [1,k] 的 hash 值

hash 公式就是:

hash(s1,len)=hash(s1,len1)×p+slen

我们知道 unsigned long long 在数值过大的时候会自动对 264 取模

单hash

采用一个一大一小两个素数

hash 公式:

hash(s1,len)=(hash(s1,len1)×p+slen)%M

hash 冲突的概率不高

双hash

取两不同的模数分别hash

hash 公式:

hash1(s1,len)=(hash1(s1,len1)×p+slen)%M1

hash2(s1,len)=(hash2(s1,len1)×p+slen)%M2

然后取 make_pair( hash1(s),hash2(s) ) 作为 hash 值

求子串hash值

公式:

hash(sl,r)=((hash(s1,r)hash(s1,l1)×prl+1)%M+M)%M

差分思想,很好理解(注意减法可能出现负数)

prl+1 是为了能抵消无关字符的 hash 值。

举个例子:

hash(s1,1)=s1

hash(s1,2)=s1×p+s2

hash(s1,3)=s1×p2+s2×p+s3

算一算hash(s2,3)大概就能理解了。

posted @   cbdsopa  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示