KMP算法:next和nextval值计算

KMP算法的next和nextval值计算

 

先看看next数据值的求解方法

例:下标从1开始(若题中给定下标为0开始,把所有值-1即可)

next数组的求解方法:根据前一个字符next,一直循环找到第一次匹配成功的下标,并把next=1;如果当前字符与下标1字符都不相同,next值就为1(初始下标值)

第一位为0,第二位为1,

第三位:把前一个模式串字符b与下标next值所对应的字符比较,b 和a不同,next为1(初始下标值)

第四位:前一个,c   c和a不同,next为1

第五位:a和a相同(下标为1)1+1=2

第六位:b和b相同(下标为2)2+1=3

第七位:a和c不同(下标为3),继续找,c下标为1,a和a相同(下标为1) 1+1=2

 

nextval数组求解方法:根据next数组的值作为下标找到第一个不同的字符,把它的下标作为nextval的值;否则继续循环比较,直到与第一个字符也相同,此时,nextval值为0

第一位为0,第二位为1,

第三位:(当前下标字符)c与a(next值1作为下标的字符进行比较),若不同则为初始下标值1

第四位: a和a相同(第一个字符),nextval值为0

第五位:b和b(下标为2),相同,继续比较,b的next为1,b和下标为1的比,即b和a比,不同,则nextval值为1

第六位:a和c(下标为3),不同,nextval为下标的值 3

第七位:a和b(下标为2),不同,nextval为下标的值 2

注:如果下标从0开始,只需把所有的next和nextval值-1就是

posted @ 2021-01-29 16:55  huyoo  阅读(3134)  评论(0编辑  收藏  举报