算法自学_BM

 Boyer Moore 算法

1. 提出:简称为 BM 算法,是由它的两位发明者 Robert S. Boyer 和 J Strother Moore 的名字来命名的。BM 算法是他们在 1977 年提出的高效字符串搜索算法。在实际应用中,比 KMP 算法要快 3~5 倍。

2. 核心思想:对于给定文本串 T 与模式串 p,先对模式串p 进行预处理。然后在匹配的过程中,当发现文本串T 的某个字符与模式串p 不匹配的时候,根据启发策略,能够直接尽可能地跳过一些无法匹配的情况,将模式串多向后滑动几位。

两种启发策略:

「坏字符规则(The Bad Character Rule)」 

「好后缀规则(The Good Suffix Shift Rule)」

这两种启发策略的计算过程只与模式串 p 相关,而与文本串 T 无关。因此在对模式串 p 进行预处理时,可以预先生成「坏字符规则后移表」和「好后缀规则后移表」,然后在匹配的过程中,只需要比较一下两种策略下最大的后移位数进行后移即可。

启发策略

1. 坏字符规则

         当文本串 T 中某个字符跟模式串 p 的某个字符不匹配时,则称文本串 T 中这个失配字符为 「坏字符」,此时模式串 p 可以快速向右移动。

「坏字符规则」的移动位数分为两种情况:

情况 1:坏字符出现在模式串 p中。
        这种情况下,可将模式串中最后一次出现的坏字符与文本串中的坏字符对齐,如下图所示。
        向右移动位数=坏字符在模式串中的失配位置-坏字符在模式串中最后一次出现的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值