KMP算法
首先KMP算法是基于next函数而实现的,与BF算法相比,KMP算法是没有了主串指针回溯的情况。改进后的算法复杂度为O(m+n).
KMP算法的简述
每一次比较时,当子串与主串不相等的时候,主串的指针不回溯,而是通过next函数所求得的值当作下一位子串开始比较的位置。(即尽可能地向右边滑动一段的距离,从而减少比较的次数)。
KMP算法匹配过程示例
第一趟匹配: a b
a b c a b c a c b a b
a b
c a c
第二趟匹配: a b a b c a
b c a c b a b
a b c a
c
第三趟匹配: a b a b c a b c a
c b a b
a b c a
c
首先要解决的是,当主串和子串失配的时候子串要向后
滑动多少,这就要说到
next函数了,
next函数就是计算子串每一位失配的时候应该向后滑动多少。
假设此时匹配的关系如下:
S = S1 S2 … S(i-j+1) S(i-j+2)… S(i-k+1) … S(i-1)
S(i) … S(n)
T = T1 T2 … T(j-k+1) … T(j-1)
T(j) …
T =