数据结构 —— KMP算法

KMP算法解决了简单匹配算法中i的回溯问题和未充分利用已匹配信息的缺点。通过求next数组,利用最长前缀后缀找到模式串的移动方式,避免重复比较,提高效率。在构建next数组时,从0~length-1范围设next[0]=-1,其余根据最长前缀后缀计算得出。尽管KMP存在局限,但其改善版本可进一步优化匹配过程。
摘要由CSDN通过智能技术生成

简单匹配算法

如果我们要对下面的主串P和模式串P进行匹配

步骤一:i=10,j=6
在这里插入图片描述

匹配失败,i 回到上一次匹配的起始位置的下一位,j=0

步骤二:i=5,j=0
在这里插入图片描述

由此可见,简单匹配算法存在两个问题

  1. i 发生了回溯(从 i=10 跳到了 i=5 )
  2. 没有利用到前面已匹配到的信息(ABCDAB),增加了计算量

因此,我们提出了KMP算法


KMP 算法

步骤一:当 i=10,j=6 时

已匹配的信息有相同的前后缀(如ABCDAB中,AB同时出现在前缀和后缀中),此时模式串P的前缀AB == 主串S的后缀AB(长度为2,即 next[j]=next[6]=2,PS:假设不存在相同的前后缀,则next[j]=0 ),不需要重复进行比较,那么,我们仅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值