数据结构-KMP手算next与nextval(全网最简单,包会)

数据结构-KMP手算next与nextval(全网最简单,包会)手算next值与nextval,全网最简单,时间关系,就不手打了。直接把笔记内容图片粘贴了,绝对最简单。有问题的话,下方评论。方法1:引入了一个maxL,在计算nextval时,比较方便。强烈建议读者按照思路算一遍,再找几道题试试。方法1水印处是nextval[3]=nextval[1]=0考完研了,手敲一遍吧(2018-12-26更新)KMP手算next与nextval…

手算next值与nextval,全网最简单,时间关系,就不手打了(考完研后又手打了一遍,与图片一致)。

直接把笔记内容图片粘贴了,绝对最简单。有问题的话,下方评论。

方法1:引入了一个maxL,在计算nextval时,比较方便。强烈建议读者按照思路算一遍,再找几道题试试。

数据结构-KMP手算next与nextval(全网最简单,包会)
方法1

水印处是nextval[3]=nextval[1]=0

考完研了,手敲一遍吧(2018-12-26更新)

KMP手算next与nextval1
序号 1 2 3 4 5 6 7 8 9 10 11 12
模式串t a b a b a a a b a b a a
maxL 0 0 1 2 3 1 1 2 3 4 5 6
next 0 1 1 2 3 4 2 2 3 4 5 6
nextval 0 1 0 1 0 4 2 1 0 1 0 4

准备工作:写好模式串t,序号从1开始。

maxL:首个为0,计算包含当前字符的串的最大相同前后缀中字符的个数。例如,对于序号3,aba,有一个相同前后缀。特别地,对序号5,ababa有3个。将计算好的maxL填入,如上表。

next:首个为0,填入前一个maxL的值加1,例如,next[2]=maxL[1]+1=0+1=1。

nextval:首个为0,从左至右,比较maxL与next。

               若不同,填入next的值,例如,对于序号2,maxL[2]=0,next[2]=1,则nextval[2]=1。

               若相同,填入下标为该值的nextval,例如,maxL[3]=next[3]=1。则nextvaL[3]填入下标为1的nextval,即nextval[3]=nextval[1]=0;

方法2:直接计算next与nextval,计算量小一些,在理解方法1的基础上再看。建议两个方法记一个。

数据结构-KMP手算next与nextval(全网最简单,包会)
方法2

水印处是nextval[3]=nextval[1]=0

考完研了,手敲一遍吧(2018-12-26更新)

                                                                                    KMP手算next与nextval2

序号 1 2 3 4 5 6 7 8 9 10 11 12
模式串t a b a b a a a b a b a a
next 0 1 1 2 3 4 2 2 3 4 5 6
nextval 0 1 0 1 0 4 2 1 0 1 0 4

根据法一,可知next的前两个必为01(据此可以排除选项),仔细观察可知next与maxL的关系,去除maxL(考试不考),但是nextval就会算的麻烦一点。读者根据自身情况选择法一还是法二。

next:前两个填入01,计算不包括当前字符的串的前后缀相同个数。填入该值加1。例如,序号4前,aba,有一个相同前后缀。填入1+1=2。特别地,没有相同前后缀时填1,例如,序号3前,ab,填入0+1=1;

nextval:首个为0,从左至右,比较该序号字符,与next值对应的字符是否相同。

               若不同,填入next值即可。例如,对于序号2,字符b,next[2]=1。b与序号1对应的字符a不同,则填入next,nextval[2]=next[2]=1。

               若相同,填入next值对应序号的nextval,例如,序号3,next[3]=1,序号3字符a与1对应的字符a相同,则nextval[3]=nextval[1]=0。

如果题目中的next是从-1开始的,算完后,全部-1就好。

更多数据结构与算法实现:数据结构(严蔚敏版)与算法的实现(含全部代码)

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

今天的文章数据结构-KMP手算next与nextval(全网最简单,包会)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/6433.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注