1. 引言
前一篇中介绍了字符串KMP算法,其利用失配时已匹配的字符信息,以确定下一次匹配时模式串的起始位置。本文所要介绍的Boyer-Moore算法是一种比KMP更快的字符串匹配算法,它到底是怎么快的呢?且听下面分解。
不同于KMP在匹配过程中从左至右与主串字符做比较,Boyer-Moore算法是从模式串的尾字符开始从右至左做比较。下面讨论的一些递推式都与BM算法的这个特性有关。
思想
首先,我们一般化匹配失败的情况,设主串\(y\)、模式串\(x\)的失配位置为i+j与i,且主串、模式串的长度各为\(n\)与\(m\),如下图:

已匹配上的字符结构:
\[y[i+j+1 \dots j+m-1] = x[i+1 \dots m-1] \]
失配后下一次匹配时,模式串应如何对齐于主串呢?从上图中看出,我们可以利用两方面的信息:
- 已经匹配上的字符结构,
- 主串失配位置的字符
本文详细介绍了Boyer-Moore算法,一种比KMP更高效的字符串匹配算法。通过好后缀移动和坏字符移动,利用已匹配信息与失配信息,使模式串移动更高效。文章通过实例解释了算法的工作原理,并提供了复杂度分析。
订阅专栏 解锁全文
877

被折叠的 条评论
为什么被折叠?



