对于BM算法的理解——文本匹配算法

BM算法由Boyer和Moore提出,是一种高效的字符串匹配算法。它利用坏字符规则和好后缀规则减少冗余遍历,提高性能。坏字符规则通过坏字符位置和模板中上一次出现位置计算后移位数;好后缀规则类似。通过这两个规则的组合,BM算法能在匹配失败后快速定位。在具体实现中,坏字符规则通常用256大小的数组存储,好后缀规则计算公共后缀串长度。
摘要由CSDN通过智能技术生成

关于KMP的算法已经熟悉了,但是发觉KMP算法中仍然不能完全去掉冗余的遍历,这样依然使效率变低,于是就继续研究了一下另外的一个算法,BM算法

BM算法是Boyer和Moore提出的一个模式匹配的算法,是一个经典的字符串匹配算法,性能优越,在当今仍然有广泛的运用。

BM算法引入了两个最关键的跳跃表,一个是坏字符规则表,另一个是好后缀规则表。只要能理解这两个表就会一下子明白了。BM算法是从后往前匹配的。

坏字符就是匹配出错的文本的字符,好后缀是已经匹配的后缀。

    i为坏字符,mple为好后缀。

简单的定义坏字符规则为:后移位数 = 坏字符的位置 - 搜索词中中的上一次字符出现的位置

简单的定义好后缀规则为:后移位数 = 好后缀 - 搜索词中上一次好后缀出现的位置

坏字符没有在模板中出现过,则后移位数 = 坏字符的位置 + 1

而每一次的匹配中出现问题后,后移位数 = max {坏字符规则,好后缀规则},这就是BM算法的精髓。下面来进行匹配分析一下,再对规则进行分析


文本为:"heresimpleexample",模板为:"example",

坏字符规则表:不在模板中有的字符都设为模板长度。

这并不是坏字符最终移动的位数,移动的位数需要根据坏字符位置 - 模板长度 + 1 + 坏字符规则 

好后缀规则表:

匹配的过程如下,只需4次匹配,好快!


第1次匹配时,坏字符为m,没有好后缀,根据坏字符规则,后移位数 = 3

第2次匹配时,坏字符为s,好后缀为mple,根据坏字符规则,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值