由于毕业设计(入侵检测)的需要,这两天仔细研究了BM模式匹配算法,稍有心得,特此记下。
首先,先简单说明一下有关BM算法的一些基本概念。
BM算法是一种精确字符串匹配算法(区别于模糊匹配)。
BM算法采用从右向左比较 的方法,同时应用到了两种启发式规则,即坏字符规则 和好后缀规则 ,来决定向右跳跃的距离。
BM算法的基本流程: 设文本串T,模式串为P。首先将T与P进行左对齐,然后进行从右向左比较 ,如下图所示:
若是某趟比较不匹配时,BM算法就采用两条启发式规则,即坏字符规则 和好后缀规则 ,来计算模式串向右移动的距离,直到整个匹配过程的结束。
下面,来详细介绍一下坏字符规则 和好后缀规则 。
首先,诠释一下坏字符和好后缀的概念。
请看下图:
图中,第一个不匹配的字符(红色部分)为坏字符,已匹配部分(绿色)为好后缀。
1)坏字符规则(Bad Character):
在BM算法从右向左扫描的过程中,若发现某个字符x不匹配,则按如下两种情况讨论:
i. 如果字符x在模式P中没有出现,那么从字符x开始的m个文本显然不可能与P匹配成功,直接全部跳过该区域即可。
ii. 如果x在模式P中出现,则以该字符进行对齐。
用数学公式表示,设Skip(x)为P右移的距离,m为模式串P的长度,max(x)为字符x在P中最右位置。
例1:
下图红色部分,发生了一次不匹配。
计算移动距离Skip(c) = 5 - 3 = 2,则P向右移动2位。
移动后如下图:
2)好后缀规则(Good Suffix):
若发现某个字符不匹配的同时,已有部分字符匹配成功,则按如下两种情况讨论:
i. 如果在P中位置t处已匹配部分P'在P中的某位置t'也出现,且位置t'的前一个字符与位置t的前一个字符不相同,则将P右移使t'对应t方才的所在的位置。
ii. 如果在P中任何位置已匹配部分P'都没有再出现,则找到与P'的后缀P''相同的P的最长前缀x,向右移动P,使x对应方才P''后缀所在的位置。
用数学公式表示,设Shift(j)为P右移的距离,m为模式串P的长度,j 为当前所匹配的字符位置,s为t'与t的距离(以上情况i)或者x与P''的距离(以上情况ii)。
以上过程有点抽象,所以我们继续图解。
例2:
下图中,已匹配部分cab(绿色)在P中再没出现。
再看下图,其后缀T'(蓝色)与P中前缀P'(红色)匹配,则将P'移动到T'的位置。
移动后如下图:
自此,两个规则讲解完毕。
在BM算法匹配的过程中,取SKip(x)与Shift(j)中的较大者作为跳跃的距离。
BM算法预处理时间复杂度为O(m+s),空间复杂度为O(s),s是与P, T相关的有限字符集长度,搜索阶段时间复杂度为O(m·n)。
最好情况下的时间复杂度为O(n/m),最坏情况下时间复杂度为O(m·n)。
如果有兴趣了解更多有关BM算法的朋友,请关注我的另一篇文章 BM模式匹配算法-实现(C语言)
分享到:
相关推荐
### BM模式匹配算法剖析 #### 一、引言 串的模式匹配,即子串的定位操作,是一种在计算机科学中极为重要的运算。对于给定的正文主串T(长度为n)和模式串P(长度为m),目标是在主串T中找到等于模式串P的子串。...
**AC-BM 多模式匹配算法** AC-BM(Aho-Corasick-BM)算法是一种结合了Aho-Corasick算法和Boyer-Moore算法的字符串匹配方法,主要用于在一个大文本串中高效地查找多个模式串。这种算法提高了在大量模式下搜索文本的...
### BM模式匹配算法详解 #### 一、引言 模式匹配算法是计算机科学中的一个重要分支,在文本检索、信息处理等领域有着广泛的应用。特别是在中文信息处理领域,高效的模式匹配算法能够极大地提升系统的性能。BM...
《多模式字符串匹配算法——AC_BM算法的深度解析与实现》 字符串匹配算法是计算机科学中的一个重要领域,尤其在文本处理、搜索引擎、数据挖掘等领域有着广泛应用。其中,AC_BM算法,即Aho-Corasick算法结合Boyer-...
在网络安全领域,字符串匹配算法如BM算法被广泛应用于入侵检测系统(IDS),用于识别已知的攻击模式或恶意代码。通过对网络流量中的数据包进行快速分析,可以及时发现潜在的威胁。 总的来说,BM算法是字符串匹配...
**BM模式匹配算法原理** BM算法是由Robert S. Boyer和J Strother Moore在1977年提出的,它的主要特点是高效和快速。该算法通过跳过不可能包含目标模式的字符,减少了不必要的比较次数,尤其在处理长文本和短模式时...
综上所述,本文主要介绍了BM字符串匹配算法的原理和C++实现,包括坏字符规则和好后缀规则的运用,以及如何构建和利用这两个规则来提高匹配效率。通过学习并实践这些内容,你将能够更好地应对涉及字符串处理的复杂...
BF 算法--串的朴素模式匹配算法 BF 算法(Brute Force 算法)是一种朴素的串模式匹配算法,用于在主串中查找子串的位置。该算法的时间复杂度为 O(n*m),其中 n 是主串的长度,m 是子串的长度。 BF 算法的主要思想是...
除了BM和KMP,还有许多其他的字符串匹配算法,如Boyer-Moore-Horspool算法(改进的BM),Rabin-Karp算法(使用哈希函数进行匹配),Sunday算法,以及AC自动机(Aho-Corasick算法)等。这些算法各有优缺点,适用于...
- **BM算法**:该算法利用了模式串中字符的位置信息以及不匹配字符的信息,通过两种不同的位移策略(bad character rule 和 good suffix rule)实现了高效的模式匹配。BM算法在最优情况下可以达到线性时间复杂度。 ...
单模式匹配算法(Boyer-Moore Algorithm,简称BM算法)是计算机科学中用于字符串搜索的一个高效算法,由Robert S. Boyer和J Strother Moore于1977年提出。这个算法在处理大规模文本时表现出了显著的效率,尤其在目标...
在众多字符串匹配算法中,Boyer-Moore(BM)算法因其高效性而备受青睐。BM算法是一种改进的动态跳跃策略,能显著减少不必要的字符比较次数,从而提升搜索效率。 BM算法的核心思想在于两个主要规则:坏字符规则(Bad...
字符串模式匹配算法在此过程中扮演了核心角色,因为它可以高效地查找可能的病毒签名或恶意代码序列。本话题将深入探讨如何利用C语言实现基于字符串模式匹配算法的病毒感染检测。 首先,我们需要了解字符串模式匹配...
在计算机科学领域,多模式匹配算法是用于在一个文本串中搜索多个模式串的高效方法。AC_BM算法,即Aho-Corasick自动机与Boyer-Moore算法的结合,是这类问题的一个强大解决方案。它结合了两种经典的字符串搜索算法,以...
"java 中模式匹配算法-KMP 算法实例详解...10. KMP 算法的扩展:KMP 算法可以扩展到其他模式匹配算法,例如 BM 算法、Rabin-Karp 算法等。 KMP 算法是一种高效的模式匹配算法,广泛应用于字符串匹配、文本搜索等领域。
使用了BM匹配算法计算了左右图像的视差图,本次BM匹配算法是使用python3.7,通过调用opencv库函数实现
在这个项目中,我们将深入探讨BM3D算法的原理、Python实现以及其在图像处理中的应用。 BM3D算法是基于块匹配和三维滤波的思想,它通过寻找相似图像块并在噪声空间中形成三维数据阵列,然后利用这些阵列进行协同滤波...
BM算法(Boyer-Moore算法)是一种高效的文字查找算法,由Robert...总之,BM算法和N-BOX算法是字符串匹配领域的经典算法,它们通过巧妙地利用模式串的信息实现了高效的搜索,对于理解和掌握字符串处理技术具有重要意义。