浅谈KMP
这是我期末考试前复习的,并不推荐大家看我的整体学习KMP
这里推荐两个KMP分析透彻的网站
从头到尾彻底理解KMP(2014年8月22日版)
kmp算法的位置在11话33:30,空降成功記得回來贊我 (严蔚敏老师的)
以下是个人理解KMP
1.1介绍KMP
我们学习其他的算法求子串在母串中的位置都会很麻烦,因为每次失配母串都要回溯到
i-j+2,并且简单算法(BM)算法整体的时间复杂度为O(n*m)
但是用kmp算法就可以化解母串回溯这个问题,使得时间复杂度仅为O(m+n);
下面来说KMP
学习KMP的时候不要说为什么这样,要多想原来还可以这样
1.2一些概念
前缀 :指除了最后一个字符以外,一个字符串的全部头部组合;
后缀 :指除了第一个字符以外,一个字符串的全部尾部组合。
1.3步骤:
1>求最长前缀后缀;
这里都要给它写出来
**
2求next值
**
就是将得到的最大公共元素长度向后移一位加一
这里要一个一个写出来所有的浅醉和后缀
3求nextval
比如说这个我的,next[4]等于1,可我一看我的j[next[4]]还是个a,我从a到a变得没有意义,我就让next【4】=next【next【4】】= 1;
这就使nextval的含义,让比较次数更少。
来源:CSDN
作者:西风下长安
链接:https://blog.csdn.net/qq_43813182/article/details/103655271