传统匹配
有S和T,2个串,S是待匹配的串,T是匹配串,(点就是他们的小标序列–自定义的)
他们在匹配的时候,是逐一匹配,假如在第一次匹配的第5个点碰到不相同的内容,这个时候会发生,S回溯到第一次匹配开始点的下一个点,T会回溯到开始点
性能:
会带来多次重复的匹配,非常消耗性能,时间复杂度远远大于KMP匹配
KMP匹配
首先有一个 S串=”abababcabababa”
然后我们定义一个要匹配的模式串T=”abababa”,
在KMP算法中最重要的就是NEXT函数,他的作用就是减少重复匹配的次数
1.NEXT函数如何求值
首先我们要清楚 “abababa”中有几个候选串,如何求候选串呢
a b a b a b a
i 0 1 2 3 4 5 6
T1=??(n=0~K)
T2=??(n=i-k~i)
k不能大于i
当T1=T2
这个时候就可以知道其中一个候选串
重点 1:我们要求出所有的候选串,并取出最长结果的串最为NEXT函数的值
然后我们把i=0,1,2,3,4,5,6的NEXT函数值求出来
当i=0的时候,next函数值为-1,这个是特殊情况
重点,我们就可以根据不用每次都把T回溯到开始点位置,直接回溯到T的next值得下标点进行再次匹配
好处:充分利用已经计算过的结果,减少重复计算