力扣总结 算法进阶(二):滚动哈希
目录
滚动哈希是一种针对固定长度的滑动窗口的哈希方法。
朴素的哈希需要对所有窗口单独求哈希值,时间复杂度和空间复杂度都和窗口长度相关。 用滚动哈希则可以递推求得相邻窗口的哈希值,优化为线性复杂度。
一般采用 Rabin-Karp 算法来实现滚动哈希。核心思想就是将窗口 W 看作是一个 base 进制的数:
$$hash(W)=\sum_{i=0}^{|W|-1}base^{|W|-(i+1)}*W[i]$$
base 取一个大于元素范围的数,该 base 进制的数就唯一对应一个窗口。
特别注意,当哈希值很大必须要取模时,为了尽量避免哈希冲突,base 取一个大于 元素种数 的 质数, 而mod 应该取一个大于 窗口种数^2 的 质数。
1 基础
- 0187 重复的DNA序列