`

BM模式匹配算法-原理(图解)

阅读更多

  由于毕业设计(入侵检测)的需要,这两天仔细研究了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语言)

 

          

 

 

   

 

 

 

 

 

分享到:
评论
1 楼 yuhui_bear 2009-10-21  
必须谢一个。 说的清晰明了。

相关推荐

    BM模式匹配算法剖析

    ### BM模式匹配算法剖析 #### 一、引言 串的模式匹配,即子串的定位操作,是一种在计算机科学中极为重要的运算。对于给定的正文主串T(长度为n)和模式串P(长度为m),目标是在主串T中找到等于模式串P的子串。...

    AC-BM 多模式匹配算法

    **AC-BM 多模式匹配算法** AC-BM(Aho-Corasick-BM)算法是一种结合了Aho-Corasick算法和Boyer-Moore算法的字符串匹配方法,主要用于在一个大文本串中高效地查找多个模式串。这种算法提高了在大量模式下搜索文本的...

    BM模式匹配算法

    ### BM模式匹配算法详解 #### 一、引言 模式匹配算法是计算机科学中的一个重要分支,在文本检索、信息处理等领域有着广泛的应用。特别是在中文信息处理领域,高效的模式匹配算法能够极大地提升系统的性能。BM...

    多模式的字符串匹配算法--AC_BM算法的实现代码

    《多模式字符串匹配算法——AC_BM算法的深度解析与实现》 字符串匹配算法是计算机科学中的一个重要领域,尤其在文本处理、搜索引擎、数据挖掘等领域有着广泛应用。其中,AC_BM算法,即Aho-Corasick算法结合Boyer-...

    字符串匹配算法-BM算法的实现代码

    在网络安全领域,字符串匹配算法如BM算法被广泛应用于入侵检测系统(IDS),用于识别已知的攻击模式或恶意代码。通过对网络流量中的数据包进行快速分析,可以及时发现潜在的威胁。 总的来说,BM算法是字符串匹配...

    snort使用的BM模式匹配算法

    **BM模式匹配算法原理** BM算法是由Robert S. Boyer和J Strother Moore在1977年提出的,它的主要特点是高效和快速。该算法通过跳过不可能包含目标模式的字符,减少了不必要的比较次数,尤其在处理长文本和短模式时...

    BF算法--串的朴素模式匹配算法

    BF 算法--串的朴素模式匹配算法 BF 算法(Brute Force 算法)是一种朴素的串模式匹配算法,用于在主串中查找子串的位置。该算法的时间复杂度为 O(n*m),其中 n 是主串的长度,m 是子串的长度。 BF 算法的主要思想是...

    各种字符串匹配算法--BM,KMP等

    除了BM和KMP,还有许多其他的字符串匹配算法,如Boyer-Moore-Horspool算法(改进的BM),Rabin-Karp算法(使用哈希函数进行匹配),Sunday算法,以及AC自动机(Aho-Corasick算法)等。这些算法各有优缺点,适用于...

    字符串模式匹配算法的改进研究

    - **BM算法**:该算法利用了模式串中字符的位置信息以及不匹配字符的信息,通过两种不同的位移策略(bad character rule 和 good suffix rule)实现了高效的模式匹配。BM算法在最优情况下可以达到线性时间复杂度。 ...

    单模式匹配算法 BM

    单模式匹配算法(Boyer-Moore Algorithm,简称BM算法)是计算机科学中用于字符串搜索的一个高效算法,由Robert S. Boyer和J Strother Moore于1977年提出。这个算法在处理大规模文本时表现出了显著的效率,尤其在目标...

    字符串匹配算法--BM算法的实现代码

    在众多字符串匹配算法中,Boyer-Moore(BM)算法因其高效性而备受青睐。BM算法是一种改进的动态跳跃策略,能显著减少不必要的字符比较次数,从而提升搜索效率。 BM算法的核心思想在于两个主要规则:坏字符规则(Bad...

    多模式匹配算法 AC_BM

    在计算机科学领域,多模式匹配算法是用于在一个文本串中搜索多个模式串的高效方法。AC_BM算法,即Aho-Corasick自动机与Boyer-Moore算法的结合,是这类问题的一个强大解决方案。它结合了两种经典的字符串搜索算法,以...

    java 中模式匹配算法-KMP算法实例详解

    "java 中模式匹配算法-KMP 算法实例详解...10. KMP 算法的扩展:KMP 算法可以扩展到其他模式匹配算法,例如 BM 算法、Rabin-Karp 算法等。 KMP 算法是一种高效的模式匹配算法,广泛应用于字符串匹配、文本搜索等领域。

    BM3D-Denoise-master.rar

    在这个项目中,我们将深入探讨BM3D算法的原理、Python实现以及其在图像处理中的应用。 BM3D算法是基于块匹配和三维滤波的思想,它通过寻找相似图像块并在噪声空间中形成三维数据阵列,然后利用这些阵列进行协同滤波...

    用C++实现BM的字符串模式匹配算法

    综上所述,本文主要介绍了BM字符串匹配算法的原理和C++实现,包括坏字符规则和好后缀规则的运用,以及如何构建和利用这两个规则来提高匹配效率。通过学习并实践这些内容,你将能够更好地应对涉及字符串处理的复杂...

    BM算法 N-BOX算法

    BM算法(Boyer-Moore算法)是一种高效的文字查找算法,由Robert...总之,BM算法和N-BOX算法是字符串匹配领域的经典算法,它们通过巧妙地利用模式串的信息实现了高效的搜索,对于理解和掌握字符串处理技术具有重要意义。

    BMP算法原理-一种流行的模式匹配算法

    BMP算法原理 BMP算法是一种精确字符串匹配算法,使用范围极广。它采用从右向左比较的方法,同时应用到了两种启发...BM算法是一种经典的模式匹配算法,使用范围极广,例如在入侵检测、文本搜索等领域中都有广泛的应用。

    BM模式匹配(利用BM模式匹配字符串)

    **BM模式匹配算法详解** BM(Boyer-Moore)算法是一种高效的字符串搜索算法,由Robert S. Boyer和J Strother Moore于1977年提出。它以其高效性和广泛的应用性在信息技术领域中占有重要地位。BM算法的核心思想是通过...

Global site tag (gtag.js) - Google Analytics