无法理解在topcoder中解释的Rabin Karp算法的哈希函数

时间:2015-06-19 09:30:39

标签: algorithm hash rabin-karp

我正在阅读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中使用任何哈希函数,但是为了保持教程的流程,我需要解释,因为我可能没有正确理解它。

1 个答案:

答案 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]为模。

这正是文章中上面的哈希。