“单模式精确匹配中,KMP 算法用前缀函数在失配时复用已知边界,给出确定性线性最坏时间;Rabin–Karp 算法用滚动哈希筛选窗口,必须把碰撞验证和概率假设写入保证;多模式场景由Aho–Co…”
形式陈述 ​
Rabin–Karp 为模式
直觉
Rabin–Karp 把固定长度的字符串窗口映成可滚动更新的便宜数字指纹,用来快速排除绝大多数窗口。窗口右移时减去最高位贡献、乘基数并加入新字符,因而每步常数时间;哈希相等只产生候选匹配,仅对这些位置做昂贵的最终字符比较来排除碰撞。随机选择模数或基数可让对抗碰撞概率可控。
例子与边界
窗口右移时从旧哈希减去最高位贡献、乘基数并加新字符。模运算滚动指纹不是密码哈希,也不需要抗主动碰撞;反之,通用密码哈希通常不支持
以基 abracadabra 搜 abra 时,首窗命中,后续滚动到末尾再次命中。
若哈希命中后不核验原串,算法成为 Monte Carlo 并可能假阳性;固定弱参数可被构造大量碰撞,使验证退化为
推论与应用
字符串匹配是任务,模同余支撑滚动更新,随机化提供碰撞概率分析。通用哈希给出“对任意固定不同键,随机选函数后碰撞概率小”的族性质;滚动多项式指纹还要求窗口能在
它仍是顺序扫描一次文本的候选过滤器。若文本固定、模式查询很多,FM-index会预处理 BWT 与 rank 结构,以压缩空间回答 count,并为定位另付采样成本。双模数只能降低工程碰撞概率,不等于这种静态全文索引,也不能替代对随机参数和核验策略的正式说明。
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
- Dan Gusfield, Algorithms on Strings, Trees, and Sequences, Cambridge University Press, 1997,Chs. 1–8。