Horspool‘s算法和Boyer-Moore算法

本文介绍了Horspool算法和Boyer-Moore算法在字符串匹配中的应用。Horspool算法在遇到不匹配字符时,使用最后字符在预计算表中的对应移动距离。Boyer-Moore算法则包含坏符号移动和好后缀移动两部分,坏符号移动基于预计算表,好后缀移动涉及模式的后缀匹配,避免无效移动。
摘要由CSDN通过智能技术生成

在上述BARBER比较中(详细见Introduction to the Design and Analysis of Algorithms (3th)英文版P262)。原本以为在倒数第二次比较时,R匹配了,然后E遇到了A,这个时候不匹配,而这个时候这个算法就会移动字符串三位。我一直不理解为什么E不匹配A,那么不是应该调用A在表中对应的移动字符数吗?今天终于明白了。。。。真是天资不足啊。原来只要遇到不匹配的,就调用最后那个字符对应的文本中的字符c(假设为c),然后再去表中查询c对应的移动数。。而不是不匹配那个字符所对应的文本中字符。这个时候可能还要疑问说,那倒数第二次如果没有两个R只有一个R呢,假设把第一R换成U,那这个时候字符串就应该移动6位,因为如果像我假设的一样移动字符串中匹配字符到最后一个不匹配的地方的话,那是不可能的。这样在表中找到的移动数肯定是错的。

 

Boyer-Moore 算法

1.   如果第一个字符就已经不匹配了,那么移动方法和Horspool是一样的。但是当有一个以上字符匹配之后又出现不匹配,这个时候就有区别了

2.   第一种移动叫坏符号移动(bad-symbol shift)。这个比较简单容易理解。我们根据这个表算出来的移动距离的 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值