字符串 hash

(由于字符串 hash 和整数 hash 是两个东西,以下将字符串 hash 称作 strash)

前情提要:

strash:我来!(非常好数据,使我的 strash WA 掉)

strash 是什么?strash 有什么用?该如何避免上述情况?

strash 是什么

strash 的原理其实很简单:

将一个字符串当作 b 进制数。

So you wrote a wrong code because of this b>|Σ|

注意不是

我的建议是第 i 个字符的位权为 bi1(静态位权,方便维护)。

strash 有什么用

以下应用均不包含预处理 O(N) 时间。

O(1) 判断两个字符串相等

直接 strash 然后判断相等即可。

O(logN) 判断两个字符串的字典序谁大谁小和求 LCP

二分 LCP,strash 判断相等,最后比较后面一个字符的大小。

O(N) 在某个字符串上查找另一个字符串(KMP:???)

枚举出现位置,可以计算出 [1,patlen] 的哈希值然后每往后面走一个统计一次贡献。

该如何避免“非常好数据,使我的 strash WA”

猜猜看,一个房间内至少有多少个人才能使得有至少 12 的 概率有两个人的生日相同(不考虑年份)?

答案其实令人惊讶:只需要 23 个。

所以,strash 的错误率还挺高的。

下面提供两种解决这个问题的方法(多选):

  1. 开大模数。更大的模数会使你的失误率变得更小。

  2. 多重哈希。一个 strash 的失误率可能很大,但是如果你开到 5 个甚至 15 个,心力交瘁的就是 hacker 了。

最后,祝大家 for(;;){rp += LLONG_MAX;}

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