BM 字符串匹配算法

BM算法

  先来看【后缀匹配】,是指模式串的比较从右到左,模式串的移动也是从左到右的匹配过程。

经典的BM算法其实是对后缀蛮力匹配算法的改进。(每次往后移动一位效率简直太低了。。。)

为了实现更快移动模式串,BM算法定义了两个规则,坏字符规则和好后缀规则:

首先从宏观上看看这什么意思:

1.如果字符不匹配,我们就利用这个不匹配的信息去决定Skip多少;

2.如果我们已经有了部分匹配的字符,那我们同样利用这些信息去决定Skip策略;

3.这一点我理解的也不太透彻,暂且把它理解成:模式串的比较从右到左,模式串的移动从左到右吧。

【坏字符规则】

  • 坏字符没出现在模式串中,这时可以把模式串移动到坏字符的下一个字符,继续比较;
  • 坏字符出现在模式串中,这时可以把模式串第一个出现的坏字符和母串的坏字符对齐,当然,这样可能造成模式串倒退移动。

 

 

【好后缀规则】

好后缀的处理规则中最核心的内容:

  • 在模式串中,查找跟好后缀匹配的另一个子串;
  • 在好后缀的后缀子串中,查找最长的、能跟模式串前缀子串匹配的后缀字串。

【合并:两种策略并行,选择最优的Skip策略】 

 

【性能评估】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值