数据结构KMP-串next算法、nextVal计算

-之前看到数据结构中字符串的模式匹配时,花了半天的时间,看了别人视频、论文的讲述,半天也搞不懂说的啥,把我的理解写下来,方便大家需要的可以快速理解。以下也有一些总结,可以看完解析再看。
总结:
1、next值:看前一位元素、next值去定位找到要比较的元素
两元素相同则next加1
两元素不同,则以该元素的为基准,根据next继续去定位要比较的元素,相同则next为该基准next+1,一直比较完,一直不同则next为1

2、nextVal:看当前元素、next值去定位要比较元素
两元素不同则nextVal为当前元素的next值
相同则以该元素为基准去定位继续要比较的元素,不同,nextVal为该基准的next,相同,为0,依次比较。。。。。
————————————————
先看看next数据值的求解方法

位序 1 2 3 4 5 6 7 8 9
模式串 a b a a b c a b c
next值 0 1 1 2 2 3 1 2 3
————————————————
next数组的方法是:
1.第一位的next值为0
2.第二位的next值为1
后面求解每一位的next值时,根据前一位进行比较、前一位的next值的作用,定位串中要比较元素的位置
3.第三位的next值:前一位的模式串为b ,对应的next值为1;将第二位的模式串b与第一位的模式串a进行比较,不相等;则第三位的next值为1(其他情况均为1)
4.第四位的next值:第三位的模式串为a ,对应的next值为1;将第三位的模式串a与第一位的模式串a进行比较,相同,则第四位的next值得为1+1=2
5.第五位的next值:第四位的模式串为a,对应的next值为2;将第四位的模式串a与第二位的模式串b进行比较,不相等;第二位的b对应的next值为1,则将第四位的模式串a与第一位的模式串a进行比较,相同,则第五位的next的值为1+1=2
6.第六位的next值:第五位的模式串为b,对应的next值为2;将第五位的模式串b与第二位的模式中b进行比较,相同,则第六位的next值为2+1=3
7.第七位的next值:第六位的模式串为c,对应的next值为3;将第六位的模式串c与第三位的模式串a进行比较,不相等;第三位的a对应的next值为1,
则将第六位的模式串c与第一位的模式串a进行比较,不相同,则第七位的next值为1(其他情况)
8.第八位的next值:第七位的模式串为a,对应的next值为1;将第七位的模式串a与第一位的模式串a进行比较,相同,则第八位的next值为1+1=2
9.第九位的next值:第八位的模式串为b,对应的next值为2;将第八位的模式串b与第二位的模式串b进行比较,相同,则第九位的next值为2+1=3

————————————————

-别的网友写的nextVal挺好的,截图如下:


image.png

你可能感兴趣的:(数据结构KMP-串next算法、nextVal计算)