如何在Rabin-Karp算法中选择模数值?

时间:2013-02-02 22:10:33

标签: algorithm math string-matching rabin-karp

我有一个关于选择 q d in Rabin-Karp algorithm来搜索字符串的问题。该算法使用值 q 作为模数, d 作为散列函数。

如果我选择 q 作为权力数2且d = q-1或d = q + 1

  • 这些选择如何影响虚假命中?

  • 在d = q + 1和d = q-1的情况下,哪些模式可以确定虚假命中?

1 个答案:

答案 0 :(得分:1)

X mod(2 ^ n +1)可以描述为交替的和/差,例如

X = 0x11223344,n = 8,X mod 257 == 0x44 - 0x33 + 0x22 - 0x11 mod 257。 这里的问题是任何重复的字母都会自行取消 - 不太实用 - 当然n不一定是8。

X mod(2 ^ n -1)将是所有n位模式的 sum ,例如

X = 0x11223344,n = 8,X mod 255 ==(0x44 + 0x33 + 0x22 + 0x11)mod 255

这里的问题是切换字节会自行取消: 哈希('ab')=哈希('ba')。