字符串哈希详解 二维哈希 Hash

本文详细介绍了字符串哈希方法,包括为何选择质数p,如何计算字符串及子串的hash值,以及处理溢出的两种方式。此外,还探讨了二维哈希的概念,强调了不同方向哈希值所用质数的重要性。文中提到了相关算法的应用实例和在线比赛题目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串hash方法

字符串 h a s h hash hash 就是把一个字符串映射成一个非负整数。

(同时碰撞的概率极低)

设计一个较大质数 p p p,把字符串看作 p p p 进制数。(如 31 31 31 131 131 131 1331 1331 1331

(想想为什么要用质数)

对于已知的字符串 s s s,我们有 h a s h hash hash 值为 H ( s ) \text{H}(s) H(s),那么我们在 s s s 后面增加一个字符 c c c 构成新的字符串 s + c s+c s+c,该串的 h a s h hash hash 值则为 H ( s ) ∗ p + ( c − ′ a ′ + 1 ) \text{H}(s)*p+(c-'a'+1) H(s)p+(ca+1)

如我们取 p = 131 p=131 p=131,对于字符串 ′ a b a c ′ 'abac' abac p p p 进制数为 ( 1   2   1   3 ) p (1~2~1~3)_p (1 2 1 3)p,即 h a s h hash hash 值为 1 ∗ p 3 + 2 ∗ p 2 + 1 ∗ p + 3 1*p^3+2*p^2+1*p+3 1p3+2p2+1p+3。此时我们的字符串更新为 ′ a b a c d ′ 'abacd' abacd,那么我们的 ′ a b a c ′ 'abac' abac 需要左移一位, p p p 进制数变为 ( 1   2   1   3   0 ) p (1~2~1~3~0)_p (1 2 1 3 0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值