字符串搜索算法(一)Boyer-Moore算法

来源:互联网 发布:北京建筑软件培训 编辑:程序博客网 时间:2024/06/05 10:54
Boyer-Moore字符串搜索算法是一种非常高效的字符串搜索算法。它由Bob Boyer和J Strother Moore设计于1977年。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。不同于朴素模式(brute-force search)的逐个字符对比,它不需要对被搜索的字符串中的字符进行逐一比较,而会跳过其中某些部分。

这里使用图说明下,BM算法是怎么跳过某些字符的。假设我们要在text表示的字符串中搜索pattern表示的字符串。这里使用了原论文的一个字符串例子。
BM算法首先需要text串与pattern串左侧对齐,然后是从pattern的最右侧的字符开始,指针是从右向左移动,依次与text串中字符匹配。

如图左对齐后,首先T与F比较,F与T不匹配,同时观察发现,F不在pattern中,所以可以直接把pattern向后移动到F的后一个字符,并与之对齐。如下图:
移动之后,发现上图中-与F也不匹配,但是发现-存在于pattern串中。所以直接向后移动到两个字符串的-对齐的位置,如下图:
这个时候红框中的字符匹配,指针左移动。
这种情况与第一种情况一样,L不存在于pattern串中,所以pattern可以直接跳到text串的L字符后边。
此时,依次向左匹配,匹配成功。





Boyer, Robert S.; Moore, J Strother (October 1977). "A Fast String Searching Algorithm" . Communications of the ACM
http://www.inf.fh-flensburg.de/lang/algorithmen/pattern/bmen.htm
0 0