【问题标题】:rabin-karp algorithm using rolling hash exclisive OR使用滚动哈希异或的 rabin-karp 算法
【发布时间】:2017-07-27 01:05:19
【问题描述】:

我试图理解这个问题:

在下列问题中,取字符值为: 答:0 C: 1 克:2 T:3

在文本 GATTACA 中,使用排他计算的哈希值 或对于子字符串 GAT 是 1。什么是哈希值 子字符串ATT?

l google rabin-karp 使用异或,什么都没有。 有人可以帮我理解吗? 非常感谢

【问题讨论】:

    标签: algorithm rabin-karp


    【解决方案1】:

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

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

    顺便说一句,这是 0。如果你对两个相同的值进行异或,你会得到 0,所以为了摆脱第一个 G,你需要用 GAT 再次对它进行异或。

    【讨论】:

      【解决方案2】:

      关于 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-09
        • 2013-12-23
        • 1970-01-01
        • 2012-01-18
        • 2016-09-06
        • 2018-11-22
        • 2021-05-26
        • 1970-01-01
        相关资源
        最近更新 更多