我有一个关于选择 q 和 d in Rabin-Karp algorithm来搜索字符串的问题。该算法使用值 q 作为模数, d 作为散列函数。
如果我选择 q 作为权力数2且d = q-1或d = q + 1
这些选择如何影响虚假命中?
在d = q + 1和d = q-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')。