【发布时间】:2017-07-27 01:05:19
【问题描述】:
我试图理解这个问题:
在下列问题中,取字符值为: 答:0 C: 1 克:2 T:3
在文本 GATTACA 中,使用排他计算的哈希值 或对于子字符串 GAT 是 1。什么是哈希值 子字符串ATT?
l google rabin-karp 使用异或,什么都没有。 有人可以帮我理解吗? 非常感谢
【问题讨论】:
标签: algorithm rabin-karp
我试图理解这个问题:
在下列问题中,取字符值为: 答:0 C: 1 克:2 T:3
在文本 GATTACA 中,使用排他计算的哈希值 或对于子字符串 GAT 是 1。什么是哈希值 子字符串ATT?
l google rabin-karp 使用异或,什么都没有。 有人可以帮我理解吗? 非常感谢
【问题讨论】:
标签: algorithm rabin-karp
我认为您不应该使用 XOR 来查找哈希值,经典的方法可以提供更好的哈希质量。但是,如果您想使用滚动哈希计算哈希值,您可以执行以下操作:
hash(ATT) = hash(GAT) xor hash(G) xor hash(T).
顺便说一句,这是 0。如果你对两个相同的值进行异或,你会得到 0,所以为了摆脱第一个 G,你需要用 GAT 再次对它进行异或。
【讨论】:
关于 Rabin-Karp 的内容非常好,但在这里完全无关紧要。专注于相关部分,即:
A=0,T=3
使用简单的xor作为散列函数查找字符串ATT的散列。
答案是A xor T xor T = A = 0。或者,如果您绝对坚持使用滚动哈希函数 hash(ATT) = hash(GAT) xor G xor T = 1 xor 2 xor 3 = 0。
【讨论】: