IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构与算法——串与kmp算法 -> 正文阅读

[数据结构与算法]数据结构与算法——串与kmp算法

数据结构与算法——串与kmp算法

KMP算法

首先要明确kmp算法中next数组的作用:记录的是模式串下一次应该与主串进行匹配的下标,不是模式串应该移动的距离。

在描述kmp算法时为了形象,将提高算法效率的方法说成:不让主串的指针回溯,将模式串“ 滑动 ” 尽可能的距离后,继续进行比较。这里的滑动是加了引号的滑动,实际是指针指向数组下标的更换。

next【j】(注意到了吗,next数组中填放的是模式串的指针,next【 j 】存放的是下一次要与主串比较下标元素,下标就是next【 j 】这次要求的内容,(等于说上一次求了,下一次就用)next【】数组的求法要以 j 指针的数值为铺垫)数组的求法:

求法:

next【 j 】= 0 , 当 j == 1 时,也就是指向模式串中的第一个元素

next【 j 】= L(max)+ 1,L(max)是匹配过的子串中最大相等前后缀的长度

next【 j 】= 1 , 当匹配过的字串没有最大相等前后缀时


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fRpxavrB-1636556238457)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211021214435142.png)]

就像这一题:

模式串的指针我们默认为 j 。

1、j 指向 a ,a是模式串中的第一个元素,所以为 0

2、j 指向 b ,前面只有 a ,没有最大相等前后缀,所以为 1

3、j 指向 a ,前面匹配过的子串是 ab , 没有最大相等前后缀 ,所以next数组中的数为 1

4、j 指向 b ,前面匹配过的子串是 aba , 最大相等前后缀为 1 ,所以next数组中的数为 2

5、j 指向 a ,前面匹配过的子串是 abab ,最大相等前后缀为 2 ,所以next数组中的数为 3

6、j 指向 b ,前面匹配过的子串是ababa ,最大相等前后缀为 3 ,所以next数组中的数为 4

7、j 指向 a ,前面匹配过的子串是ababab , 最大相等前后缀为 4 ,所以next数组中的数为 5

8、j 指向 a ,前面匹配过的子串是abababa ,最大相等前后缀为 5 ,所以next数组中的数为 6

9、j 指向 b ,前面匹配过的子串是abababaa , 最大相等前后缀为 1 ,所以next数组中的数为 2

所以next【 j 】数组为 0 1 1 2 3 4 5 6 2

到此依靠人脑next数组中数值的判断已经没问题了


接下来就是让计算机知道怎么求解next数组中的值了

也就是编程求得next数组的函数值(也是最难的 呜呜呜呜)

(2条消息) Round10—串_你倒是敲代码鸭.-CSDN博客

先插入一个有些新意和代表性的kmp算法编程题


pta错题集

kmp算法中要知道next【i】取值的依据然后才能进行模式匹配

next【i】数组的求解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ml9mEh2b-1636556173275)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211021102400925.png)]

8+7+6+5+4+3+2+1+1(空串)

= 37

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:57:43  更:2021-11-11 12:59:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 0:59:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码