zoukankan      html  css  js  c++  java
  • next nextval

    1 KMP算法中next与nextval值的计算

    以上两张图代表了next值的求法,本人总结后做如下叙述:

    根据公式可知:

    next[1]=0

    next[2]=1

    next[3]的求法根据公式可以直接求出,但比较麻烦,网上也有很多说法,大同小异都是根据公式进行叙述,本人认为2以后的next值可以直接对串进行比较得出,每次从第一位开始和最后一位开始比较,依次1、2位与n-1、n位比较,然后1、2、3与n-2、n-1、n位进行比较,若有串相等,则得出最长串的长度,并加上1即使next值

    以下的文字是从网上摘录,求nextval的思路

    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)。

    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。

    模式串   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

    作者:小德cyj
    出处:http://www.cnblogs.com/dongzhuangdian
    欢迎转载,希望注明出处

  • 相关阅读:
    模拟光照中的凹凸纹理原理和应用
    Visual Studio 2010 SP1正式开放下载
    同桌的你网工版
    [转载]同桌的你程序员版
    学习计划:SSIS
    基于Java的HTML解析器
    初次使用NHibernate遇到的问题
    .NET下开源CMS系统汇总
    MyEclipse、Tomcat启动项目报错
    VBA 分文件夹 分excel
  • 原文地址:https://www.cnblogs.com/dongzhuangdian/p/5059830.html
Copyright © 2011-2022 走看看