KMP算法关键点解释

  • 设主串为T,匹配串为P

在这里插入图片描述 KMP算法的优点是通过证明了已匹配模式串子串的最大前后缀来保证模式串指针j可以不用回到初始位置,算法时间复杂度从O(lenT*lenP)简化成了O(lenT+lenP)

  • 先从朴素算法开始,从T[0],P[0]扫描,可以发现第6个字符不匹配
  • 设j是T串失配处的指针,也等于第一次失配成功部分的子串长度,下面要从该子串中找到更有效的部分。
    在这里插入图片描述
    考虑j的下一个位置:我们想要的是将j尽量往后移动,因为TGTG!=GTGT,GTG==GTG,TG!=GT,
    第一次和第二次的公共串不相同,也就是第二次和T串的公共部分不相同,可以跳过这次匹配;而第三次和第一次的公共串相同,都是GTG,也就是第三次和T串的公共部分相同,
    由于公共项都已经匹配成功,直接让j移动到GTG后的字符位置,而T串的指针i不用动,还是A这个位置。
    所以大可不必进行朴素算法匹配,这样就得到了KMP算法
T:G T G T G
P
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值