软件设计师学习笔记—数据结构—KMP

软件设计师学习笔记—数据结构—KMP


欢迎大家去作者本人的B站的频道,观看相同的内容
https://www.bilibili.com/read/cv16979415
PS:本人学生一名,自学,没有项目经验,可能对程序的理解有误,有问题欢迎提出。
变量的名字有翻译,单击变量的右上角的数字,到文章的下面,有对变量的解释。理解之后,单击对应解释的后面回车键可回到刚刚阅读的地方。
了解KMP匹配算法前,先了解最简单的字符串匹配算法

首先,给两个字符串
两个string类型的字符串
两个字符串
然后这两个字符串一对一比较,但是这种方法是很慢的。毕竟要从头匹配到尾,需要很长的时间
GIF
最简单的匹配算法演示
但是这种方法有几个特点

    1.代码简单,逻辑清晰。因为要将每一位都与其匹配。成功一位,就向下一位继续匹配,直到匹配完成。否则,就回到刚开始匹配位置的下一位。

    2.需要用到的知识不是很复杂,比较简单。

    3.所花的时间很长,就是时间复杂度大。毕竟,最好的结果为O(n+m),最坏的结果为O(n*m)。

因此我们会对其进行改进,而得到KMP算法,它与最简单的字符串匹配算法不同,其实就是省略一部分重复的字串,而这一部分就会用一个Next[],存放。而KMP算法的核心差不多也是Next数组推导

    这一部分,纯理论很难说,我们就通过代码来一步一步的讲解。

算法主体
Get_next()
图下就是KMP算法的实现了
Next()

KMP代码实现
然后我们就来看代码的时间
时间分析

时间分析
我们可以看到第一个就是简单的字符串的匹配算法,而第二个是KMP算法,可见两个所花费的时间是不同的,KMP所花费的时间更短。

以上就是KMP算法的讲解,谢谢大家的观看
欢迎大家去作者本人的B站的频道,观看相同的内容,拜托了,增加浏览量一下
https://www.bilibili.com/read/cv16979415

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值