使用滚动散列exclisive OR的rabin-karp算法

时间:2017-03-07 00:05:14

标签: algorithm rabin-karp

我试图理解这个问题:

在以下问题中,将字符值取为: 答:0 C:1 G:2 T:3

在文本GATTACA中,使用exclusive计算的哈希值 或者子字符串GAT是1.什么是哈希值 子串ATT?

使用异或,谷歌rabin-karp,没什么。 有人能帮助我理解吗? 非常感谢你

2 个答案:

答案 0 :(得分:0)

我认为你不应该使用XOR来查找哈希值,经典方法可以提供更好的哈希质量。但是,如果您希望使用滚动哈希值来计算哈希值,则可以执行以下操作:

hash(ATT) = hash(GAT) xor hash(G) xor hash(T). 

顺便说一句是0。如果xor两个相同的值,你得0,所以为了摆脱第一个G,你需要用GAT再次xor。

答案 1 :(得分:0)

关于Rabin-Karp的事情非常好,但在这里完全无关紧要。专注于相关部分,即:

  

A = 0,T = 3
  使用简单的ATT作为哈希函数查找字符串xor的哈希值。

答案是A xor T xor T = A = 0。或者,如果您绝对坚持使用滚动哈希函数hash(ATT) = hash(GAT) xor G xor T = 1 xor 2 xor 3 = 0