【问题标题】:In RabinKarp Algorithm why compare hash first?在 RabinKarp 算法中,为什么要先比较哈希?
【发布时间】:2017-05-10 15:19:48
【问题描述】:

在 Rabin Karp 子串搜索算法中:

1) 计算子串的哈希值 2)取一个滑动窗口[等于子字符串的大小],并将窗口中存在的字符串的哈希值与子字符串的哈希值进行比较。 3)如果哈希匹配,那么我们将窗口内容与子字符串进行比较。

问题: 1)首先匹配哈希然后比较在性能方面有什么好处?为什么我们不能只是比较?比较哈希可以更快,但如何(我没有得到)?

【问题讨论】:

  • 您是否阅读了维基百科的文章,尤其是关于滚动散列函数的部分? en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm
  • @IanMercer : 哦,是的,我也读到了滚动哈希函数……让我印象深刻的是,我们可以以滚动方式将字符串与子字符串进行比较……无论如何,现在一切都很好清除。

标签: algorithm rabin-karp


【解决方案1】:

随着窗口的滑动,只需O(1) 时间来计算新的哈希值,O(1) 时间来比较哈希值。

每次滑动窗口时进行完整的字符串比较最多需要O(m) 时间,其中m 是子字符串的长度,并且可能会出现分支预测错误。

【讨论】:

  • 哦..是的....谢谢!让我印象深刻的是,我们可以以滚动方式比较字符串和子字符串...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
相关资源
最近更新 更多