KMP算法解析--从问题入手

目录

 

KMP 算法理解 

1. 起源:

2. 算法理解

2.1 要点

2.2 算法核心思想

    2.2.1 主串遍历

   2.2.2 子串回溯核心

3. 总结:

4. 附录:

1. 最长匹配真前后缀 解释

2. 完整代码及运行截图


KMP 算法理解 

参考 :

https://blog.csdn.net/starstar1992/article/details/54913261/

https://segmentfault.com/a/1190000008575379

关于 next 数组 :可以参考(我自己写的) https://blog.csdn.net/x_xx_xxx_xxxx/article/details/83898805

1. 起源:

KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第一位就是《计算机程序设计艺术》的作者。

如你所见, KMP 是 三位发现者的 首字母大写缩写。K -- Knuth、M -- Morris 、P -- Pratt。

2. 算法理解

2.1 要点

   1 主串遍历不回溯

   2 模式串匹配兼回溯

2.2 算法核心思想

    2.2.1 主串遍历

   主要 利用已经部分匹配这个有效信息 ,保持主串指针i不回溯,通过修改模式串指针j,让模式串尽量地移动到有效的位置 。

   即可以提前分析子串(即匹配的模式串,下称子串,不再重复注释),设计出一个匹配到当前子串回溯的长度(主串指针不动)。简易理解:

即 :

      (第一步 :)主串指针 i 前方的 j  个字符和子串前 j 个字符相同 ,则 i = i++; j = j++ ; 比较下一个字符串,

      (第二步:)如果不相同, i 不变, j 重新赋值,继续进行 第一步的匹配。

        这时,问题变成了,子串如何回溯的问题。 此部分代码可以如下表示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值