在 Rabin Karp Algorithm 为什么先比较散列?
In RabinKarp Algorithm why compare hash first?
在 Rabin Karp 子串搜索算法中:
1) 计算子串的hash
2) 取一个滑动 window [等于子字符串的大小] 并将 window 中存在的字符串的哈希值与子字符串的哈希值进行比较。
3) 如果哈希匹配,那么我们将 window 内容与子字符串进行比较。
问题:
1)首先匹配哈希而不是然后比较在性能方面有什么好处?为什么我们不能只是比较?比较哈希可以更快但是如何(我没有得到)?
随着 window 的滑动,计算新哈希只需要 O(1)
时间,比较哈希只需要 O(1)
时间。
每次滑动 window 进行完整的字符串比较最多需要 O(m)
次,其中 m
是子字符串的长度,并且很可能会受到影响分支预测错误。
在 Rabin Karp 子串搜索算法中:
1) 计算子串的hash 2) 取一个滑动 window [等于子字符串的大小] 并将 window 中存在的字符串的哈希值与子字符串的哈希值进行比较。 3) 如果哈希匹配,那么我们将 window 内容与子字符串进行比较。
问题: 1)首先匹配哈希而不是然后比较在性能方面有什么好处?为什么我们不能只是比较?比较哈希可以更快但是如何(我没有得到)?
随着 window 的滑动,计算新哈希只需要 O(1)
时间,比较哈希只需要 O(1)
时间。
每次滑动 window 进行完整的字符串比较最多需要 O(m)
次,其中 m
是子字符串的长度,并且很可能会受到影响分支预测错误。