KMP算法的正确性证明及一个小优化

直接把作业帖上来是不是有点不太公道呀。。。
  
  无所谓啦反正各位看着开心就行KMP算法对于模式串PP,建立其前缀函数NN ,其中N[q]N[q] 表示在PP中,以qq位置为结束的可以匹配到前缀的最长后缀的长度(也可以理解为那个前缀的结束位置),在匹配中,若P[i]P[i]与S[j]S[j]失配,则令i=N[i?1]+1i=N[i?1]+1 ,否则现考虑如何构造NN ,设当前以计算出N[1..i?1]N[1..i?1] ,则令k=N[i?1]k=N[i?1] ,若 P[k+1]=P[i]P[k+1]=P[i],则令N[i]=k+1N[i]=k+1 ,否则令k=N[k]k=N[k] 。重复上述过程,直至找到可证该算法能在Θ(|P|)Θ(|P|) 的时间内构造出前缀函数NN ,在Θ(|S|)Θ(|S|) 的时间内完成匹配,总的时间复杂度为KMP算法的正确性证明先证明匹配过程的正确性:在过程中,若P[1..q]P[1..q] 与S[s+1...s+q]S[s+1...s+q] 匹配,而P[q+1]P[q+1]与S[s+q+1]S[s+q+1] 失配,那么由NN的定义可立即得出P[1..N[q]]P[1..N[q]] 与 S[s+q?N[q]+1...s+q]S[s+q?N[q]+1...s+q] 匹配,而S[1...t]S[1...t]与S[s+q?t+1...s+q]S[s+q?t+1...s+q] 失配(N[q]<t<q)(N[q]<t<q) ,即只需检验P[N[q]+1]P[N[q]+1] 与S[s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值