1. 概述
1.1 问题描述
假设我们有:
- ①长度为
n
的主串s
- ②长度为
m
的模式串p
而我们的目的是在主串中检查是否存在模式串
1.2 BF铺垫
在BF(暴力法,Brute Force)中,我们采取的策略是从s中依次取m长度的字串与p做比较,而这样的话,时间复杂度就是 O ( n × m ) {O(n\times m)} O(n×m)
1.3 RK的优化
RK(Rabin-Karp)的策略就是优化了BF中字串与模式串的比较过程,利用哈希码将此过程提升至 O ( 1 ) {O(1)} O(1),从而让整个匹配过程的时间复杂度提升至 O ( n ) {O(n)} O(n),当然,前提是不会有过多的哈希冲突
1.4 需要注意的点
- 哈希算法必须高效,否则无法达到性能的提升
- 哈希冲突的解决
2. 代码实现
/**
* @Classname RK
* @Description Rabin-Karp