个人对KMP算法的理解

通过查阅相关书籍和博客,大概总结下KMP算法,主要说一下对next[]数组的理解

字串匹配

S:  ababcababa

P:  ababa


重点在于求P的next[]数组

规定next[1]=0

P的第2个字符为b,与第1个字符a不同,所以next[2]=0

P的第3个字符为a,与第1个字符a相同,所以next[3]=1

P的第3到4的字符为ab,与第1到2的字符ab相同,所以next[4]=2

p的第3到5的字符为aba,与第1到3的字符aba相同,所以next[5]=3

所以:

   i12345
   P[I]ababa
next[i]00123

另外举个算法导论上的例子说明next[]的求法

   i12345678910
   P[i]ababababca
next[i]0012345601

对于KMP使用next[]进行匹配的过程如下

S:  ababcababa

P:  ababa


第一次匹配

   i12345     
  Sababcababa
  Pababa     


发现到第5位的时候不匹配了

在这之前一共匹配了4位

字串P往右移动i-next[i]位,即4-next[4]

通过查表得next[4]=2

故字串P往右移动2位



第二次匹配

   i  12345   
  Sababcababa
  P  ababa  


发现到第3位的时候不匹配了

在这之前一共匹配了2位

字串P往右移动2-next[2]位

通过查表得next[2]=0

故字串P往右移动2位




第三次匹配

   i    12345 
  Sababcababa
  P    ababa


发现到第1位的时候不匹配了

在这之前一共匹配了0位

字串P往右移动1位



第四次匹配的时候成功


第一次写博客,多多包涵

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值