KMP中Next值和NextVal值的定义

        在KMP算法中,有两个重要的步骤就是需要对模式串求解其Next数组和NextVal数组。

        网络上的文章有许多关于求解这两个数组的文章。然而,绝大多数文章都是告诉你这两个数组是怎么求解的,而且这些文章由于实现的标准不同。对于同样的字符串,他们求解出的Next数组和NextVal数组往往是不相同的,尽管它们都是对的。

       这样的文章不仅看起来非常费劲,而且在花了很多功夫看完后,往往是知道了怎么求Next和NextVal值,却不清楚这些算法到底求了什么。

       接下来,我将根据我的理解对它们提出定义:

Next值

       对于字符串s,由s可得前缀子字符串集合以及后缀子字符串集合。其中表示字符串s的长度。表示空字符串。

       则Next值定义如下:

      简单点讲:Next 值就是字符串s的最长相同前缀和后缀子字符串的长度。

NextVal值

       记c表示字符串s的后续字符。用函数形式表示为c=bak(s)

       同时,我们定义前缀子字符串的后续字符如下:,其中s[k]表示字符串s的第k的字符。简单讲就是s'在s中的下一个字符。

       则NextVal值定义如下:

        特殊情况:当时,NextVal将取值为-1。

      简单点讲:NextVal值就是字符串s的的最长相同且满足后续字符不同的前缀和后缀子字符串的长度。

Tip:

      在KMP算法中,记初始输入字符串为T,则求解Next(k)和NextVal(k)时,上述的s对应subStr(T,1,k),后续字符c对应T[k+1]。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值