Cormen String匹配Rabin-Karp

时间:2011-12-30 09:52:11

标签: string algorithm rabin-karp

我正在阅读Cormen等算法导论中的Rabin-Karp算法。

www.cs.uml.edu/~kdaniels/courses/ALG_503_F08/503_lecture11.ppt

注意这里==用作mod运算符

关于幻灯片13的上述说明,即Eq 34.2,如图所示。在等式中我们有h ==(d)powerof((m-1)(mod q)是m位文本窗口的高阶位置中的数字“1”的值。

我的问题在这里作者的意思是“数字值”1“在m位文本窗口的高位位置”?

在幻灯片14上,作者如何得到(7-3.3).10 + 2(mod 13)为8(mod 13)?

在平均案例分析中,我们可以提出一个启发式分析,假设模数q的减少值就像从sigma *到Z的随机映射。这里作者的意思是什么?

1 个答案:

答案 0 :(得分:1)

你的第二个问题似乎只是关于带-ve数的模运算。想到这一点的一种方法是工作模式M你可以随意添加或减去M,因为M相当于0 mod M.所以我们有(7-3.3).10 + 2(mod 13) = -2.10 + 2 = -18 = 13 + 13-18 = 8 mod 13

我的第一个问题不太清楚,但让我详细研究一下。当一个字符首次出现在文本窗口中时,它就会被添加进去。然后它会沿着文本窗口移动,最后我们想要删除它的所有内存,这样在它移出文本窗口后它不会影响哈希值。

首先我们看到字符x,并将它添加到哈希值到目前为止,所以我们得到h.d + x。当我们看到下一个字符时,我们乘以d(并做其他我试图解释的东西),然后添加新字符 - 比如说y。所以我们得到...... + x * d + y。下一步给我们...... + x * d * d + y * d + z。当我们即将摆脱这个角色时,我们的哈希值为x * d ^(m-1)+ ....,其中....仅取决于x之后的字符。因此,我们可以通过在乘以d之前减去x * d ^(m-1)来消除x对哈希值的影响。