KMP题目的解

吃可爱长大的小学妹 提交于 2020-01-26 09:45:51

浅谈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的含义,让比较次数更少。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!