栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据结构复习5:KMP算法next数组计算方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构复习5:KMP算法next数组计算方法

串的模式匹配KMP算法中next[]数组的求解总结
步骤(1)

初始化

next[1]=0  

next[2]=1;

步骤(2)求next[j],令k=next[j-1]
步骤(3)

S[j-1]    S[k]  比较大小

         = ,   next[j]=k+1

         != ,  k=next[k], k!=0, 返回(3);

         k= 0,next[j]=1

根据以上方法,在具体习题中,需要建立一个表格,即可解决此类问题。

j(字符串位序)12345....
S[j]  (字符串对应位序的字符)..................
next[j]  (下一次需要开始匹配的字符位序)..................
具体计算过程

下面是结合具体例题的实际计算过程:

例题:在kmp算法中进行模式匹配,模式串为“ababaaababaa”的next数组值为(   )

首先建立表格如下:

j123456789101112
S[j]ababaaababaa
next[j]

然后按照方法进行计算next(j)数组:   

        1),初始化:next[1]=0     next[2]=1

        2), j=3 ,求 next[3],

                        k = next[j-1]=next[3-1]=next[2]=1,

                        S[k]=S[1]=a   S[j-1]=S[3-1]=S[2]=b  S[k]!=S[j-1]    k=next[k]=next[1]=0 

                        next[3]=1

        3),j=4, 求next[4]

                        k=next[j-1]=next[4-1]=next[3]=1

                        S[k]=S[1]=a   S[j-1]=S[4-1]=S[3]=a   S[k]=S[j-1]   next[j]=k+1

                        next[4]=1+1=2

        4),j=5,求next[5]

                        k=next[5-1]=next[4]=2

                        S[k]=S[2]=b   S[j-1]=S[4]=b  S[k]=S[j-1]   next[j]=k+1

                        next[5]=2+1=3

        5),j=6,求next[6]

                        k=next[6-1]=next[5]=3

                        S[k]=S[3]=a   S[j-1]=S[5]=a    S[k]=S[j-1]   

                        next[j]=k+1=4

        6),j=7,求next[7]

                        k=next[7-1]=next[6]=4

                        S[k]=S[4]=b  S[j-1]=S[6]=a      S[k]!=S[j-1]    k=next[k]=next[4]=2

                        S[k]=S[2]=b   S[k]!=S[j-1]    k=next[k]=next[2]=1

                        S[k]=S[1]=a    S[k]=S[j-1]   

                        next[j]=k+1=2

        7),j=8,求next[8]

                        k=next[8-1]=next[7]=2

                        S[k]=S[2]=b   S[j-1]=S[7]=a     S[k]!=S[j-1]    k=next[k]=next[2]=1

                        S[k]=S[1]=a  S[k]=S[j-1]   

                        next[j]=k+1=2

        8),j=9,求next[9]

                        k=next[9-1]=next[8]=2

                        S[k]=S[2]=b   S[j-1]=S[8]=b   S[k]=S[j-1]   

                        next[j]=k+1=3

        9),j=10,求next[10]

                        k=next[10-1]=next[9]=3

                        S[k]=S[3]=a  S[j-1]=S[9]=a   S[k]=S[j-1]   

                        next[j]=k+1=4

        10),j=11,求next[11]

                        k=next[11-1]=next[10]=4

                        S[k]=S[4]=b  S[j-1]=S[10]=b  S[k]=S[j-1]   

                        next[j]=k+1=5

        11),j=12,求next[12]

                        k=next[12-1]=next[11]=5

                        S[k]=S[5]=a  S[j-1]=S[11]=a  S[k]=S[j-1]   

                        next[j]=k+1=6

因此表格填写如下:

j123456789101112
S[j]ababaaababaa
next[j]011234223456

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295097.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号