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

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


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

首先,给两个字符串
两个string类型的字符串
两个字符串
然后这两个字符串一对一比较,但是这种方法是很慢的。毕竟要从头匹配到尾,需要很长的时间
软件设计师学习笔记—数据结构—KMP_第1张图片
最简单的匹配算法演示
但是这种方法有几个特点

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

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

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

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

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

软件设计师学习笔记—数据结构—KMP_第2张图片
Get_next()
图下就是KMP算法的实现了
软件设计师学习笔记—数据结构—KMP_第3张图片

KMP代码实现
然后我们就来看代码的时间
软件设计师学习笔记—数据结构—KMP_第4张图片

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

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

你可能感兴趣的:(软件工程师笔记,学习)