}
No match found
例子4:
1. astrings e archingexamplienvolingrelatively relative (e in pattern)
2. astringse a rchingexamplienvolingrelatively relative (a in pattern)
3. astringsearchi n gexamplienvolingrelatively relative (n not in pattern)
4. astringsearchingexamplie nvolingrelatively relative (e in pattern)
5. astringsearchingexamplie n volingrelatively relative (n not in pattern) 6. astringsearchingexamplienvolingre l atively relative
7. astringsearchingexamplienvolingrelatively relative
BMHS算法用下一个字符来计算右移量,即只使用text[i+1],当下一个字符不在模式中出现时,它的右移量比BMH算法的右移量大,通常情况下,BMHS算法比BMH算法快,当text[i]不在模式中出现,而text[i+1]却出现在模式中时,即当skip[i]>skip[i+1]时,BMHS算法的效果就不如BMH算法。
2.6 本章小结
在以上介绍的算法中,BF算法思路简单,效率太低;KMP算法引入next函数,思路新颖,效率也较之提高;BM算法考虑比较全面,包括了右移时的各种情况,但它使用了两个数组,预处理时间花费较大;BMH算法在BM算法的基础上进行了简化,只使用一个数组来计算右移量,使得算法更加简单、快速、高效;BMHS算法在BMH算法的基础上又提出考虑下一个字符,用下一个字符来决定右移量,使右移量进一步增大,算法速度更快,但在某些情况下,它的效果不如BMH算法。各种模式匹配算法的目的都在于,当模式串与文本串发生失配时模式串可以向右移动尽可能大的距离,以减少比较以及窗口移动次数。经以上对几种单模式匹配算法的分析比较,可以发现BM算法考虑较为全面,但它使用了2个函数来计算最大右移量,导致预处理时间开销较大,BMH算法和BMHS算法在其基础上进行了有效的简化和改进。随着研究的深入,之前的算法都有写
不足之处,还有更好的算法吗?
根据以上的分析,将BMH和BMHS算法的优点进行综合,在此基础上加以改进,便得到了一个效果更好、速度更快的算法,我们将这个改进算法称为BMH2C。