关闭

KMP算法求next数组和nextval数组的简单方法

标签: kmp算法
292人阅读 评论(0) 收藏 举报

http://blog.sina.com.cn/s/blog_59b4a0b701015jtk.html

next数组的求解方法是:第一位的next值为0,第二位的next值为1。后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1


nextval数组的求解方法是:nextval[1]=0。从第二位开始,若要求nextval[i],将next[i]的值对应的位的值与i的值进行比较(例如,第i为的值为'b',next[i]=3,则将i的值'b'与第三位的值进行比较),若相等,nextval[i]=nextval【next[i]】(例,nextval[i]=nextval[3]);若不相等,则nextval[i]=next[i](例,nextval[i]=next[i]=3)。


 模式串

 a

 b

 a

 a

 b

 c

 a

 c

 next

 0

 1

 1

 2

 2

 3

 1

 2

 nextval

 0

 1

 0

 2

 1

 3

 0

 2


1.第一位的nextval值必定为0,第二位如果与第一位相同则为0,如果不同则为1
 2.第三位的next值为1,那么将第三位和第一位进行比较,均为a,相同,则,第三位的nextval值为0
3.第四位的next值为2,那么将第四位和第二位进行比较,不同,则第四位的nextval值为其next值,为2
4.第五位的next值为2,那么将第五位和第二位进行比较,相同,第二位的next值为1,则继续将第二位与第一位进行比较,不同,则第五位的nextval值为第二位的next值,为1
5.第六位的next值为3,那么将第六位和第三位进行比较,不同,则第六位的nextval值为其next值,为3
6.第七位的next值为1,那么将第七位和第一位进行比较,相同,则第七位的nextval值为0
7.第八位的next值为2,那么将第八位和第二位进行比较,不同,则第八位的nextval值为其next值,为2


可在“aaaab”内进行验证:

 模式串

 a

 a

 a

 a

 b

 next

 0

 1

 2

 3

 4

 nextval

 0

 0

 0

 0

 4


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

KMP模式匹配算法中next和nextval数组的快速求解

在这里,不再对大名鼎鼎的KMP算法做过多赘述,如想了解
  • czw8528
  • czw8528
  • 2014-04-17 18:13
  • 2983

KMP中next和nextval算法简析

KMP中next和nextval算法简析
  • sinat_33107885
  • sinat_33107885
  • 2016-09-14 10:10
  • 3836

KMP算法中next和nextval数组的求解

intget_nextval(SString T,int &nextval[ ]){ //求模式串T的next函数修正值并存入数组nextval。 i=1;nextval[1]=0; j=0; ...
  • u010926958
  • u010926958
  • 2014-10-08 17:04
  • 1111

KMP算法求next数组和nextval数组的简单方法

next数组的求解方法是: intget_nextval(SStringT,int&nextval[ ]){  // 求模式串 T 的 next 函数修正值并存入数组 nextval...
  • xinsuixiaofeiyu
  • xinsuixiaofeiyu
  • 2015-08-26 16:02
  • 764

KMP算法求next数组和nextval数组的简单方法

原文链接:http://blog.sina.com.cn/s/blog_59b4a0b701015jtk.html next数组的求解方法是:第一位的next值为0,第二位的next值为1。后面求解...
  • u012496793
  • u012496793
  • 2015-01-17 16:23
  • 395

KMP算法求next数组和nextval…

当时对我帮助大大的~~~原文地址:KMP算法求next数组和nextval数组的简单方法作者:小二晨Ellennext数组的求解方法是:第一位的next值为0,第二位的next值为1。后面求解每一位的...
  • LC_1994
  • LC_1994
  • 2015-10-30 18:57
  • 514

KMP算法求next数组和nextval数组

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

KMP算法中Next数组及改进后的nextval数组的求法

【Next数组求法】 第一二位对应的next值分别为0和1 后面每一位的next值求解:根据前一位进行比较将前一位与其next值对应的内容进行比较 相等,则该位的next值就是前一位的next值加上...
  • yang_chengfeng
  • yang_chengfeng
  • 2017-07-04 02:19
  • 325

应付考试用的KMP算法中next数组及nextval数组的计算(笑)

随着数据结构考试的紧邻,突击复习又成为学生们的首要目标(笑) 做到“串”课后习题的时候,突然发现我还没有掌握KMP算法!!! 于是就在网上狂找资料,同时结合课本,算法思想是明白了,但要命的是这next...
  • Clerman
  • Clerman
  • 2017-05-17 12:45
  • 1087

KMP算法中next数组和nextval数组值的推导

提到子串的模式匹配算法就不得不提到大名鼎鼎的KMP算法,而KMP算法的实现离不开next数组,今天我们就来说一下有关next数组求值的问题。    首先我们列出next的函数定义:         0...
  • yyyyxcy
  • yyyyxcy
  • 2017-10-21 14:34
  • 155
    个人资料
    • 访问:65186次
    • 积分:1435
    • 等级:
    • 排名:千里之外
    • 原创:73篇
    • 转载:44篇
    • 译文:0篇
    • 评论:6条
    站内搜索
    最新评论