对KMP算法的核心理念的理解

串的模式匹配的算法改进过程

建立next数组,省去无效的比较
若t_j=t_k则直接回溯进一步省去无效比较
Brute-Force
KMP算法
改进的KMP

改进的地方

1、从 Brute Force 到 KMP:

建立 n e x t [ j ] next[j] next[j]数组提取加速匹配的有用信息;

有用信息:

暴力算法要一个一个进行比对,但如果知道匹配失败的位置 t j t_j tj之前的k个字符( t j − k . . . t j − 1 t_{j-k}...t_{j-1} tjk...tj1)和串开头的k( t 1 . . . t k − 1 t_1...t_{k-1} t1...tk1)个字符相同,那么就可以省去一些无效比较(具体过程还是得自己试一下)

2、从 KMP 到 改进的 KMP

n e x t [ j ] next[j] next[j]升级;

升级:

减少无效比较,直接回溯 j = n e x t v a l [ j ] j=nextval[j] j=nextval[j]
直接回溯的条件—— t j = t n e x t [ j ] t_j=t_{next[j]} tj=tnext[j]
否则还是回溯和 KMP 一样即 j = n e x t [ j ] j=next[j] j=next[j]
理由:
匹配失败的位置字符 s i s_i si t j t_j tj不匹配,那么和 t k t_k tk也不匹配。减少的无效比较就是上述过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值