在 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 是子字符串的长度,并且很可能会受到影响分支预测错误。