比较过程分析
比较次数
比较次数: 红色 + 蓝色
蓝色部分是相比暴力求解,节省下的比较次数
周期
从比较次数可以看出,呈现 1 1 1 1 5 这样的周期
- 一个周期内的比较次数:8
- 周期长度:5
- 周期个数:n/5
- 比较总次数: 周期个数 * 一个周期内额比较次数 = 1.8n
一般化结论:
- 一个周期内的比较次数:1 * (M - 1) + M
- 周期长度:M
- 周期个数:N/M
- 比较总次数: 周期个数 * 一个周期内额比较次数 = (2 - 1/M)*N < 2N因此是线性
接下来证明,上述情况是KMP算法的最差情况
最差情况
- 模式串
当模式串长度为M,首字符和其他字符全都相等(假定都为a),模式串