KMP题目的解

KMP算法详解
本文深入浅出地介绍了KMP算法,一种高效的字符串匹配算法。通过对比简单算法(如BM算法),KMP算法避免了母串的回溯问题,显著提高了搜索效率,其时间复杂度仅为O(m+n)。文章详细解释了KMP算法的概念、步骤,包括求最长前缀后缀、next值和nextval值的过程。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值