`
kmplayer
  • 浏览: 508741 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BM算法.

阅读更多
1,BM算法是Boyer-Moore算法的简称,由Boyer 和Moore提出.

2,BM算法也是一种快速串匹配算法,BM算法与KMP算法的主要区别是匹配操作的方向不同。虽然BM算法仅把匹配操作的字符比较顺序改为从右向左,但匹配发生失败时,模式T右移的计算方法却发生了较大的变化.

3,滑动距离函数:
为方便讨论,BM算法的关键是,对给定的模式T="t0t1…tm"定义一个从字符到正整数的映射:
dist :c->{1,2,…,m+1}
函数dist称为滑动距离函数,它给出了正文中可能出现的任意字符在模式中的位置。函数dist定义如下:
dist(c) = m-j  j为c在模式中的下标,以后面的为准
dist(c) = m+1  若c不在模式中或c = tm
例如,T="pattern",则dist(p)= 6 – 0 = 6, dist(a)= 6 – 1 =5, dist(t)= 6 – 3 =3,dist(e)= 2, dist(r)= 1, dist(n)= 6 + 1 = 7。

4,BM算法的基本思想是:假设将主串中自位置i起往左的一个子串与模式进行从右到左的匹配过程中,若发现不匹配,则下次应从主串的i + dist(si)位置开始重新进行新一轮的匹配,其效果相当于把模式和主串向右滑过一段距离dist(si),即跳过dist(si)个字符而无需进行比较。
一个具体的例子,如下图所示:



5,实例代码:
#include <iostream>
#include <cstring>
using namespace std;

int Dist(char *t,char ch)
{
    int len = strlen(t);
    int i = len - 1;
    if(ch == t[i])
      return len;
    i--;
    while(i >= 0)
    {
      if(ch == t[i])
         return len - 1 - i;
      else
         i--;
    }
    return len;
}

int BM(char *s,char *t)
{
    int n = strlen(s);
    int m = strlen(t);
    int i = m-1;
    int j = m-1;
    while(j>=0 && i<n)
    {
    if(s[i] == t[j])
    {
        i--;
        j--;
    }
    else
    {
        i += Dist(t,s[i]);
        j = m-1;
    }
    }
    if(j < 0)
    {
        return i+1;
    }
    return -1;
}

int main()
{
    char p1[]="abcdfedcbf";
    char p2[]="cdfe";
    cout<<BM(p1,p2);
    return 0;
}

  • 大小: 20.2 KB
分享到:
评论
2 楼 jkxydp 2013-05-13  
算法运行的结果根本就不对。
1 楼 zhangning290 2011-04-04  
楼主好像只考虑了坏字符规则,。没有考虑好后缀

相关推荐

    BM算法.md

    BM算法.md

    【安全课件】第17讲bm算法.pptx

    【安全课件】第17讲bm算法.pptx

    算法设计--串匹配问题:BF算法、KMP算法、BM算法.rar

    本资料主要探讨了三种经典的串匹配算法:BF算法(Brute Force,暴力搜索)、KMP算法(Knuth-Morris-Pratt)以及BM算法(Boyer-Moore)。接下来,我们将详细解析这三种算法的工作原理及其优缺点。 首先,BF算法是最...

    现在密码学第14讲BM算法.pptx

    现在密码学第14讲BM算法

    BM算法_bm算法_

    在实际应用中,`BM算法.cpp`可能是一个实现BM算法的C++源代码文件。在这个代码中,可能会包含对输入的文本字符串和子串进行预处理的过程,以及基于坏字符规则和好后缀规则进行匹配的主循环。`data1.txt`和`data2.txt...

    B_M算法.rar

    VC++编程实现了二元域的BM算法。Berlekamp-Massey 算法是一个少有的高效算法。只需要输入密文中的2l个比特,就可以产生LFSR的最小多项式,从而生成整个序列。这里的l是系统的线性复杂度。

    BM和SAD算法.rar_BM与SAD算法_BM和SAD双目匹配算法_SAD_bm算法_双目BM匹配

    具体来说,对于BM算法中的模板,SAD计算是将模板内的所有像素与右图像对应位置的像素进行逐像素比较,求得所有差值的绝对值之和。这个和值越小,表明两个区域的相似度越高,匹配程度也就越好。 **在双目视觉系统中...

    BM3D.rar_BM3D matlab_BM3D去噪_bm3d算法_图像去噪_图像去噪 matlab

    BM3D(Block Matching and 3D filtering)是一种在图像处理领域广泛应用的去噪算法,尤其在MATLAB环境中,它是实现图像去噪的高效工具。BM3D算法基于块匹配和三维滤波的思想,旨在去除图像中的噪声,同时尽可能保留...

    BM算法很详尽的算法讲解

    ### BM算法详解 #### 一、BM算法简介 BM算法,全称为Boyer-Moore算法,是一种高效的字符串搜索算法,特别适用于大规模数据的搜索场景。与其他常见的字符串搜索算法(如KMP算法)不同,BM算法采取了一种从右至左的...

    串匹配BM算法、KMP算法、BF算法.doc

    串匹配BM算法、KMP算法、BF算法 串匹配是计算机科学中的一种基本问题,即在给定的文本中查找并定位任意给定的字符串。串匹配算法是解决这个问题的方法,常用的串匹配算法有BF算法、KMP算法和BM算法。 BF算法...

    BM算法完整实现C代码

    **BM算法完整实现C代码** BM(Boyer-Moore)算法是一种在大文本中高效查找子串的字符串搜索算法,由Robert S. Boyer和J. Strothoff于1977年提出。相比于简单的线性查找,BM算法在处理大量数据时能显著提高查找效率...

    得到视差图(BM算法)

    ### 得到视差图(BM算法) #### 知识点概述 在计算机视觉领域,双目视觉技术是一项重要的技术,它通过模拟人眼的工作原理,利用两台摄像机从不同角度拍摄同一场景来获取深度信息。其中一种常用的方法是BM(Block ...

    BM.zip_bm_bm算法

    BM算法,全称为Boyer-Moore算法,是一种在文本字符串中查找子串出现位置的高效搜索算法。这个算法由Robert S. Boyer和J Strother Moore在1977年提出,主要应用于字符串匹配领域,对于大量数据的处理具有较高的效率。...

    BM3D.zip_BM3D_BM3D matlab代码_BM3D代码_图像去噪_图像去噪 matlab

    BM3D.zip是一个包含BM3D算法实现的MATLAB代码集合,主要用于图像去噪处理。BM3D(Block-Matching and 3D filtering)是一种基于块匹配和三维滤波的图像去噪方法,由E. A. Yaglom等人在2007年提出。该算法以其出色的...

    BM算法修改版

    BM算法,全称为Boyer-Moore算法,是一种在文本字符串中高效查找子串的搜索算法。这个"BM算法修改版"显然对原始算法进行了优化,以适应从TXT文件中读取序列并进行连续计算的需求。下面将详细介绍BM算法的基本原理、...

    串匹配问题:BF算法、KMP算法、BM算法定义.pdf

    串匹配问题:BF算法、KMP算法、BM算法定义 串匹配问题是计算机科学中的一种经典问题,它是指在主串S中查找子串T的过程。串匹配问题是一种易解问题,但它的时间性能对算法的执行效率有着至关重要的影响。本文将对串...

    BM3D.rar_BM3D降噪代码_BM3D降噪算法_bm3d改进 pudn_crossifw_millvfy

    BM3D(Block Matching and 3D filtering)是一种在图像处理领域广泛应用的去噪算法,尤其在高斯噪声去除方面表现出色。这个“BM3D.rar”压缩包包含了一个优化后的BM3D降噪代码实现,它显著缩短了运行时间,使得在...

    BM算法和sunday算法相关的原始论文

    BM算法和sunday算法是两种高效且广泛应用的字符串搜索算法,它们在计算机科学,特别是文本处理和信息检索领域中占有重要地位。这两种算法都致力于解决在一个大文本中查找子串出现位置的问题,对于大量数据的处理具有...

Global site tag (gtag.js) - Google Analytics