假设求串′ababaaababaa′的next数组

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12

1、前两位:next数组前两位一定是0,1 即前两位ab对应的next数组为01,则:

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1                    

2、接下来看第三位,按照next数组求解方法。第三位a的前一位为第二位的b,b的next值为1对应内容为a,b与a不同,向前继续寻找next值对应的内容来与前一位进行比较。因为找到第一位都没有找到与前一位相等的内容,所以第三位a的next值为1,则:

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1                  

3、接下来看第四位b,b的前一位a的next值1对应内容为a,相同,所以该位b的next值就是前一位a的next值加上1,即为2

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1 2                

4、接下来看第五位a,a的前一位b的next值2对应内容为b,相等,所以该位a的next值就是前一位b的next值加上1,即为3

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1 2 3              

5、接下来看第六位a,a的前一位a的next值3对应内容为a,相等,所以该位a的next值就是前一位a的next值加上1,即为4

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1 2 3 4            

6、接下来看第七位a,a的前一位a的next值4对应内容为b,不相等,向前继续寻找next值对应的内容来与前一位进行比较,b的next值2对应的内容为b,依旧不相等,继续向前寻找,第二位b的next值1对应内容为a,相等。因为是在第二位b处实现的相等,所以第七位a的next值为第二位b的next值上加1,即为2

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1 2 3 4 2          

7、接下来看第八位,同样道理,得出b的next值为2

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1 2 3 4 2 2        

8、接下来看第九位,前一位b的next值2对应内容为b,相等,所以此处next值为3

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1 2 3 4 2 2 3      

9、第十位同理可得,为4

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1 2 3 4 2 2 3 4    

10、第十一位a的前一位b的next值4对应内容为b,相等,所以此处next值为5

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1 2 3 4 2 2 3 4 5  

11、最后,第十二位同理可以得到next值位6

模式串 a b a b a a a b a b a a
下标 1 2 3 4 5 6 7 8 9 10 11 12
next数组 0 1 1 2 3 4 2 2 3 4 5 6

综上,串′ababaaababaa′的next数组为011234223456

kmp算法中的next数组实例解释的更多相关文章

  1. KMP 算法中的 next 数组

    KMP 算法中对 next 数组的理解 next 数组的意义 此处 next[j] = k:则有 k 前面的浅蓝色区域和 j 前面的浅蓝色区域相同: next[j] 表示当位置 j 的字符串与主串不匹 ...

  2. KMP算法中求next数组的实质

    在串匹配模式中,KMP算法较蛮力法是高效的算法,我觉得其中最重要的一点就是求next数组: 看了很多资料才弄明白求next数组是怎么求的,我发现我的忘性真的比记性大很多,每次看到KMP算法求next数 ...

  3. KMP算法中的next数组求解示意图

  4. 数据结构KMP算法中手算next数组

    总结一下今天的收获(以王道数据结构书上的为例子,虽然我没看它上面的...):其中竖着的一列值是模式串前缀和后缀最长公共前缀. 最后求得的结果符合书上的结果,如果是以-1开头的话就不需要再加1,如果是以 ...

  5. KMP算法中我对获取next数组的理解

    之前在学KMP算法时一直理解不了获取next数组的函数是如何实现的,现在大概知道怎么一回事了,记录一下我对获取next数组的理解. KMP算法实现的原理就不再赘述了,先上KMP代码: 1 void g ...

  6. 问题 1690: 算法4-7:KMP算法中的模式串移动数组

    题目链接:https://www.dotcpp.com/oj/problem1690.html 题目描述 字符串的子串定位称为模式匹配,模式匹配可以有多种方法.简单的算法可以使用两重嵌套循环,时间复杂 ...

  7. kmp算法中的nextval实例解释

    求nextval数组值有两种方法,一种是不依赖next数组值直接用观察法求得,一种方法是根据next数组值进行推理,两种方法均可使用,视更喜欢哪种方法而定. 本文主要分析nextval数组值的第二种方 ...

  8. (收藏)KMP算法的前缀next数组最通俗的解释

    我们在一个母字符串中查找一个子字符串有很多方法.KMP是一种最常见的改进算法,它可以在匹配过程中失配的情况下,有效地多往后面跳几个字符,加快匹配速度. 当然我们可以看到这个算法针对的是子串有对称属性, ...

  9. KMP算法中next数组的理解与算法的实现(java语言)

    KMP 算法我们有写好的函数帮我们计算 Next 数组的值和 Nextval 数组的值,但是如果是考试,那就只能自己来手算这两个数组了,这里分享一下我的计算方法吧. 计算前缀 Next[i] 的值: ...

随机推荐

  1. 如何编写一个python项目

    https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397616003925a ...

  2. shell 变量定义技巧总结

    可以多学习和模仿操作系统自带的/etc/init.d/functions函数库脚本的定义思路,多学习Linux系统脚本中的定义,有经验的读者最终应形成一套适合自己的规范和习惯. (1)变量名及变量内容 ...

  3. SaltStack系列(二)之常用模块

    一.saltstack的内置模块汇总 acl,    aliases,    alternatives,    apache,    archive,    artifactory,    block ...

  4. javascript-复制

    cefCopy:function(str){ var t=this; if(!str || str=="暂无激活码") { $.notice("暂无激活码", ...

  5. 19重定向管道与popen模型

    重定向 dup2 int dup(int fd) 重定向文件描述符  int newFd = dup(STDOUT_FILENO) newFd 指向 stdout int dup2(int fd1, ...

  6. Educational Codeforces Round 56 Solution

    A. Dice Rolling 签到. #include <bits/stdc++.h> using namespace std; int t, n; int main() { scanf ...

  7. Yahoo Programming Contest 2019

    A - Anti-Adjacency 签. #include <bits/stdc++.h> using namespace std; int main() { int n, k; whi ...

  8. MOPSO 多目标粒子群优化算法

    近年来,基于启发式的多目标优化技术得到了很大的发展,研究表明该技术比经典方法更实用和高效.有代表性的多目标优化算法主要有NSGA.NSGA-II.SPEA.SPEA2.PAES和PESA等.粒子群优化 ...

  9. HTTP--TCP连接

    几乎所有的 HTTP 通信都是由 TCP/IP 承载的,TCP/IP 是全球计算机及网络 设备都在使用的一种常用的分组交换网络分层协议集.客户端应用程序可以打开一 条 TCP/IP 连接,连接到可能运 ...

  10. mssql语句递归查找所有下级

    if exists (select * from sys.all_objects where name='GetOrgTree') begin drop function GetOrgTree end ...