kmp算法设计思路

子串匹配算法主要设计思路:充分利用已匹配过信息,尽量减少匹配次数。

kmp子串匹配算法即利用以上设计思路,通过对子串本身的重复模式进行检查,求出每次已匹配串中的最大前缀匹配数。

举例如下:

假设查找子串b是否出现串a中,子串b由{b1,b2, b3, ... bm}组成, 串a由{a1,a2,a3, ... an}组成:

采用归纳假设方法:假设当前b1 ~b(i-1)与a(k) ~ a(k-i)匹配,但是b(i)与a(k-i+1)不匹配,如果按照最初的设计思路,下次比较将从b1与a(k+1)开始比较,但是如果b1的某个前缀与以b(i-1)为后缀的两个子串匹配,假设匹配长度为l,则下次比较可以跳过从b(1) ~ b(l)的比较,直接比较b(l+1)与a(k-i+1);

简单思路则如上;

对应该算法的时间复杂度主要通过算法比较流程观察:仅遍历一次a串,而无回溯过程,故复杂度为O(n),计算子串的匹配长度可提前计算,计算方法可采用归纳方法推演,具体参考《算法引论》算法:Compute_Next(B, m)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值