【算法】字符串匹配2 BM算法 坏字符规则 好后缀规则 python代码实现

BM算法是一种高效的字符串匹配算法,比KMP算法快3~4倍。其核心思想是利用坏字符规则和好后缀规则减少不必要的匹配。坏字符规则通过找到坏字符在模式串中的位置来确定滑动距离;好后缀规则则考虑已匹配部分,通过寻找模式串中的匹配子串来优化滑动。当两种规则结合使用时,可以有效避免倒退,提高匹配效率。
摘要由CSDN通过智能技术生成

BM算法, Boyer-Moore,非常高效,是KMP算法的3~4倍。
高能预警,此算法较难。

核心思想

匹配过程其实就是模式串在主串中不停地往后滑动。
当遇到不匹配的字符时,BF和RK算法做法是往后滑动一位,从模式串第一个字符重新匹配。
BM
上图中,主串中的 c 其实在模式串中并不存在,所以滑动时只要与 c 有重合,肯定无法匹配。
所以可以把模式串多滑动几位,移到c后面再开始匹配。这样效率就提高了。

那么如何寻找这种规律?这就是BM算法的本质了。

算法原理

BM算法包含两部分坏字符规则( bad character rule )和 好后缀规则( good suffix
shift )。

坏字符规则

BM 算法的匹配顺序按照模式串下标从大到小的顺序,倒着匹配的。
在这里插入图片描述
倒着匹配时,主串中某个字符在模式串中没法匹配,把这个没有匹配的字符叫作 坏字符(上图中的 c

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值