首页 > 代码库 > 学渣乱搞系列之字符串滚动哈希
学渣乱搞系列之字符串滚动哈希
学渣乱搞系列之字符串滚动哈希
by 狂徒归来
我们假定字符串S = S1S2S3S4S5S6S7S8S9. 我们定义哈希函数为
H(S) = (S1bm-1+S2bm-2+S3bm-3+...+Smb0)mod h.其中b是基数,相当于把字符串看成b进制数。
b与h为合适的互素的常数。
如何求取字符串内长度为m的一段的字符子串的哈希值?
假定m = 3.
先求取H([S1...S3]) = S1b2+S2b1+S3b0.
求取H([S2...S4]) = H([S1...S3])*b + S4 - S1*b3 = S2*b2 + S3*b1 + S4*b0.
那么推导出来的滚动哈希公式就是:
H(S[k+1...k+m]) = H(S[k...k+m-1])*b + Sk+m - Sk*bm.
Rabin-Karp算法就是利用hash进行字符串匹配的算法。
学渣乱搞系列之字符串滚动哈希
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。