- KMP 算法基本原理
- 失效函数计算方法
- KMP 算法复杂度分析
(太难不看)
KMP 算法基本原理
失效函数计算方法
KMP 算法复杂度分析
解答开篇 & 内容小结
KMP 算法和上一节讲的 BM 算法的本质非常类似,都是根据规律在遇到坏字符的时候,把模式串往后多滑动几位。
BM 算法有两个规则,坏字符和好后缀。KMP 算法借鉴 BM 算法的思想,可以总结成好前缀规则。这里面最难懂的就是 next 数组的计算。如果用最笨的方法来计算,确实不难,但是效率会比较低。所以,我讲了一种类似动态规划的方法,按照下标 i 从小到大,依次计算 next[i],并且 next[i] 的计算通过前面已经计算出来的 next[0],next[1],……,next[i-1] 来推导。
KMP 算法的时间复杂度是 O(n+m),不过它的分析过程稍微需要一点技巧,不那么直观,你只要看懂就好了,并不需要掌握,在我们平常的开发中,很少会有这么难分析的代码。