我正在阅读Topcoder的Rabin Karp算法。但在that文章中,我无法获得以下哈希评估。
// calculate the hash value of the first segment
// of the text of length m
ht = 0;
for(i = 0; i < m; i++)
ht = int_mod(ht * B + text[i], M);
它与理论中解释的不同。我知道我可以自由地在Rabin Karp中使用任何哈希函数,但是为了保持教程的流程,我需要解释,因为我可能没有正确理解它。
答案 0 :(得分:1)
对我来说,它看起来和以前的理论一样。诀窍是他们以小步骤(构建多项式)来做到这一点
考虑一个长度为3的字符串的一个非常简单的例子:
我们初始化clients.Clients.Where(i => i.Benefits.Count() == 0)
。
循环首先得到位置0:
ht = 0
现在,对于位置1,我们获得ht = text[0]
的第一个力量:
B
。在第三次迭代中,我们通过将ht = text[0]*B + text[1]
再次乘以整数'多项式'得到第二次幂:B
。当然,我们可以在每一步都以ht = text[0]*B^2 + text[1]*B + text[2]
为模。
这正是文章中上面的哈希。