模式匹配之Boyer-Moore算法

Boyer-Moore算法是一种高效的模式匹配算法,尤其适用于字符集较大但模式串中字符出现较少的情况。它通过构建一个与模式串相关的辅助数组来提高效率。在匹配失败时,算法会根据辅助数组跳过相应字符。文章提供了算法的C语言实现,并通过一个实例展示其工作原理。
摘要由CSDN通过智能技术生成

BM 算法是一个较优的模式匹配算法。一般,如果不考虑模式串的长度,一个具有时间复杂度O(n)的算法应该是最优的了,但是事实不是如此。BM算法可以实现更高效率的模式匹配。分析和实验说明,BM匹配算法对于那些字符集比较大,而模式串中出现的字符比较少的时候,工作效率最快。而且,考虑KMP匹配方式的优化,可以结合KMP匹配和BM匹配,进一步提高效率。

算法的关键和 KMP 类似,也是构造一个辅助数组,不过,不同于KMP算法的是,BM算法的辅助数组大小只和匹配串的字符集大小相关(一般情况下也就是ASCII字符集,256个字符),其内容和模式串相关,辅助数组的内容即是模式串的索引:position[patten[i]]=i;  也是相当简单的辅助数组构造。

例如:
文本串:My-Name-Is-MaiK-I-Love-Kuraki-Mai
匹配串:Kuraki
(1) My-Name-Is-MaiK-I-Love-Kuraki-Mai
    Kuraki
    匹配失败对应的字符为’m’,在匹配串中没有出现,直接跳过即可。
(2) My-Name-Is-MaiK-I-Love-Kuraki-Mai
          Kuraki
    匹配失败对应的字符为’M’,在匹配串中没有出现,直接跳过即可。
(3) My-Name-Is-MaiK-I-Love-Kuraki-Mai
                Kuraki
    匹配失败对应的字符为’-’,在匹配串中没有出现,直接跳过即可。
(4) My-Name-Is-MaiK-I-Love-Kuraki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值