KMP算法总结

KMP算法:字符串匹配算法,通过辅助函数跳过不必要的扫描,提高匹配效率。

例如:

从abcdef中找到bcd可以一次性匹配成功

从abbcd中找到bcd:在b时匹配失败 需要向后移动一位重新开始匹配 因为bb相等

从 abcebcdef找到待匹配字符串bcd 时:bc匹配成功,e开始失败,下一轮寻找如果从bc中的c开始匹配就会很浪费时间,因为b≠c,从c开始匹配肯定不成功,哪里匹配失败就从哪里重新开始匹配即可,bce中e开始失败 那么就从e重新开始匹配。

kmp算法就是要告诉我们应该从哪里开始匹配才是最佳搜索方法,避免不必要的匹配过程,为此,专门有前缀函数来帮助我们 当遇到匹配失败的情况时应该后移几位开始新的匹配。

公式:S=Q-L

S:移动位数

Q:已匹配位数

L:既是自身(已匹配的字符串中)真后缀又是自身最长前缀的字符串长度 

(注释L:abcd 的后缀有:abcd、bcd、cd、d;真后缀就是不包含自身的后缀。abcd前缀有:abcd、abc、ab、a)

在上述中bcd匹配abcebcdef时,第一次是匹配成功bc,即Q=2,L=0,∴S=2,由向b后移两位到e重新开始匹配

例2:

在字符串中abcbababaabcbdf匹配

                          ababaca       字符串

Q=5

ababa的真后缀有:baba、aba、ba、a

              前缀有:ababa、abab、aba、ab、a

既是真后缀又是自身最长前缀的字符串是:aba   ∴L=3    S=5-3=2  应该向后移动两位开始下一轮匹配




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值