第4章---KMP算法

本文深入探讨了KMP字符串匹配算法的工作原理,重点在于如何通过next数组优化匹配过程,避免不必要的重复比较。next[j]数组用于指示在模式串失配时的滑动距离,减少模式串与主串的无效匹配,提高搜索效率。通过对模式串的前缀和后缀分析,可以实现更高效的字符串匹配。
摘要由CSDN通过智能技术生成

在暴力匹配中,每趟匹配失败都是模式串后移一位再从头开始比较。而某趟已匹配相等的字符序列是模式的某个前缀,这种频繁的重复比较相当于模式串不断地进行自我比较,这就是其低效的根源。因此可以从分析模式串本身动手,如果以匹配相等的前缀序列中有某个后缀正好是模式串的前缀,那么就可以将模式串向后滑动到与这些相等字符对齐的位置,主串指针i无须回溯,并从该位置开始继续比较。模式串向后滑动仅与模式串本身相关,与主串无关。

next[j]数组的含义是:在子串的第j个字符与主串发生失配时,则跳到字串的next[j]位置重新与主串当前位置进行比较

假设此时应于模式中第k个字符继续比较,则模式中前k-1个字符的子串必须满足以下条件:

p_{1}p_{2}\cdot \cdot \cdot p_{k-1}==p_{j-k-1}p_{j-k+2}\cdot \cdot \cdot p_{j-1},即前缀=后缀时。

若存在满足如上条件的子串,则发生失配时,仅需将模式向右滑动至模式串中k个字符和第i个字符相等。

next[1]==0;next[2]==1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值