首页 > 编程语言 >KMP算法中next数组以及nextval的求解(简单,通俗易懂版)

KMP算法中next数组以及nextval的求解(简单,通俗易懂版)

时间:2024-07-23 17:58:44浏览次数:17  
标签:下标 因此 nextval 后缀 模式 next KMP

以一个题为例:

计算上图中 next[ j ] 以及 nextval[ j ] 的值。

【 本文中 j 的下标从1开始。】

最长公共前后缀:

···前缀:不包含最后一个字符的所有以第一个字符开头的连续子串。

···后缀:不包含第一个字符的所有以最后一个字符结尾的连续子串。

先看next[ j ],

(1)j 的下标为1 与 2 时,next[ j ]的值默认为 0 和 1

 

(2)j的下标为 3 时,模式串的值为 a 。由于next[3]前面的next[1] 与next[2]的值分别为 a 和 b 。因此没有最大公共前后缀。所以next[3] 的值为 0+1=1

(3)j的下标为4时,模式串的值为 b 。next[4] 的最大公共前后缀为a。因此,next[4] 的值为1+1=2

(4)j 的下标为5时,模式串的值为 a 。next[5] 的最大公共前后缀为 a b 。因此,next[5]的值为2+1=3

(5)j的下标为6时,模式串的值为 a 。next[6]的最大公共前后缀为 a b a 。因此,next[6] 的值为3+1=4。

(6)j的下标为7时,模式串的值为 a 。next[7]的最大公共前后缀为  a 。因此,next[7] 的值为1+1=2。

以此类推,完整的next[ j ] 的值为:

再看nextval[ j ], 

(1)j 的下标为1时,next[ j ]的值默认为 0 。

(2)j的下标为 2 时,模式串的值为 b ,next[2] 的值为 1 。因此,j 的下标为 1 时,模式串的值为 a 。a 与 b 不相等,把next[2] 的值下移。因此,nextval[2] 的值为1。

 

(3)j的下标为 3 时,模式串的值为 a ,next[3] 的值为 1 。因此,j 的下标为 1 时,模式串的值为 a 。a 与 a 相等,把nextval[1] 的值移到netval[3]。因此,nextval[3] 的值为0。

(4)j的下标为 4 时,模式串的值为 b ,next[4] 的值为 2 。因此,j 的下标为 2 时,模式串的值为 b 。b 与 b 相等,把nextval[2] 的值移到netval[4]。因此,nextval[4] 的值为1。

(5)j的下标为 5 时,模式串的值为 a ,next[5] 的值为 3 。因此,j 的下标为 3 时,模式串的值为 a 。b 与 b 相等,把nextval[3] 的值移到netval[5]。因此,nextval[5] 的值为0。

以此类推,完整的nextval[ j ] 的值为:

以上就是KMP算法中next数组以及nextval的求解过程。

标签:下标,因此,nextval,后缀,模式,next,KMP
From: https://blog.csdn.net/2401_82456039/article/details/140639888

相关文章

  • KMP算法(简单易懂版)
    首先举个例子,第一步:此时,B与A的值不匹配。第二步:红色箭头左边的主串与模式串的元素是完全匹配的。第三步:模式串中有“AB”子串是相同的。第四步:直接移动模式串,使前缀移动到后缀的位置。最长公共前后缀:···前缀:不包含最后一个字符的所有以第一个字符开头的连续......
  • 从零开始NEXT.js(五)——路由组和平行路由
    从零开始NEXT.s(四)——服务器组件上一章我们介绍了服务器组件的内部逻辑,这一章我们重点来讲一下NEXT,js中的页面路由。路由组在我们的app文件夹下,我们可以添加一个又一个文件夹去建立我们的页面路由,当页面过多时找起来就会很复杂,用路由组的形式可以很便捷的收纳我们的路由......
  • kmp & fail树 & border
    kmp经典字符串匹配算法。其实是通过找本身前缀\(i\)的最长border,来实现快速匹配的。这里给出border的定义:字符串\(s\)的一个子串既是它的前缀又是它的后缀,则这个子串是它的border(一般不包含本身)kmp通过fail在border上跳,使得每次前面部分的字符串都是相同的,判断新加入的是否匹......
  • ABP vNext—审计日志使用
    ABPvNext—审计日志关于审计日志开启审计日志如何自定义审计日志关于审计日志审计跟踪(也称为审核日志)是一个安全相关的时间顺序记录,记录这些记录的目的是为已经影响在任何时候的详细操作,提供程序运行的证明文件记录、源或事件。ABP提供了能够为应用程序交互自动记......
  • HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号1
    本来打算找到工作再整理高级的题库,但一直没什么面试机会。宅在家里也不知道干些什么。索性就把高级的题库整理出来了。也算有头有尾。高级的题库更新之后,专业性更强了,不是真正从事这一行的,很难做出来。本人就是个小菜鸡,有一些题,我也不想不明白。题目的答案我尽可能的找到出......
  • KMP
    做法如何判断一个字符串在另一个字符串里面出现了几次,可以用哈希,不过可能被Hack这里介绍一种总时间\(O(N)\)的写法记\(F(i)\)表示字符串中前缀\([1\)~\(i]\)中最长真前后缀的长度我们可以写出这样一个地推式\(F(i)=\begin{cases}F(i-1)&不是当前字符\\i+1......
  • _findnext()调试中断,发生访问错误,错误定位到ntdll.dll
    问题:采用_findfirst和_findnext获取指定的文件夹下的文件时,_findnext()函数在调试时发生中断,发生访问错误,错误定位到ntdll.dll。错误提示如下所示:_findnext0x00007FF849ABFAAD(ntdll.dll)处(位于XXXXXXXXXXX.exe中)引发的异常:0xC0000005:写入位置0x0000000073BAD650时......
  • Z 函数(扩展KMP)
    author:LeoJacob,Marcythm,minghu6约定:字符串下标以\(0\)为起点。定义对于一个长度为\(n\)的字符串\(s\),定义函数\(z[i]\)表示\(s\)和\(s[i,n-1]\)(即以\(s[i]\)开头的后缀)的最长公共前缀(LCP)的长度,则\(z\)被称为\(s\)的Z函数。特别地,\(z[0]=0\)。国外一......
  • 扩展 KMP/exKMP(Z 函数)学习笔记
    声明本文章转载自shangruolin的博客,已经过作者(存疑)同意,帮TA宣传一下。扩展KMP/exKMP(Z函数)学习笔记兼P10479匹配统计题解。LCP:最长公共前缀。Z函数,又称扩展KMP(exKMP),能够在\(O(n)\)的时间内求出一个字符串与其所有后缀的LCP的长度。定义\(z_i\)为字符串\(s\)......
  • [Mysql]next-key lock
    next-keylock这一节我们通过实验验证next-key-lock在各种情况下的表现:在唯一索引上的等值查询我们利用主键展现这一特性命中记录下面我们来解释这张图发生了什么,会话A会话B1开启事务开启事务2快照读整张表,查到所有数据3对id为10的数据进行加forup......