`
pleasetojava
  • 浏览: 729452 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

字符串查找算法BM算法(Boyer-Moore)算法

阅读更多

字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore)。两个算法在最坏情况下均具有线性的查找时间。但是在实用上,KMP算法并不比最简单的c库函数strstr()快多少,而BM算法则往往比KMP算法快上3-5倍。

但是,最坏的情况下,BM的时间复杂度貌似也是n×n。

具体就不说了,BM算法是通过往后跳动主文本字符串来实现快速非回溯查找的,跳动的算法就是用程序中的这句来实现的,下面:

  1. i=i+m-min(j,1+last(p,T[i]));

而last是一个求文本字符串中的字符在查找字符串里面出现的最后位置。

这个算法很麻烦,呵呵,可以的话百度一下。

整个代码如下:

  1. #include<string.h>
  2. intlast(char*p,charc){//找到c在p中最后匹配的位置,没有就返回-1
  3. intlength=strlen(p),count=0;
  4. char*pp=p+length-1;
  5. while(pp>=p)
  6. {
  7. if(*pp==c)
  8. {
  9. returnlength-count-1;
  10. }
  11. pp--;
  12. count++;
  13. }
  14. return-1;
  15. }
  16. intmin(inta,intb){
  17. return(a<=b)?a:b;
  18. }
  19. intBM_index(char*T,char*p){
  20. intn=strlen(T);
  21. intm=strlen(p);
  22. inti=m-1,j=m-1;
  23. while(i<=n-1)
  24. {
  25. if(T[i]==p[j])
  26. {
  27. if(j==0)
  28. {
  29. returni;
  30. }
  31. else
  32. i--,j--;
  33. }
  34. else{
  35. i=i+m-min(j,1+last(p,T[i]));//往后跳,取决于最后一次匹配的字符的位置
  36. j=m-1;
  37. }
  38. }
  39. return-1;
  40. }
  41. int_tmain(intargc,_TCHAR*argv[])
  42. {
  43. char*p="woainizz!izzzzzz--zzzzut";
  44. inta=BM_index(p,"zzzzut");//结果18,没有问题
  45. return0;
  46. }
分享到:
评论

相关推荐

    论文研究-一种串匹配的快速Boyer-Moore算法.pdf

    在对经典的Boyer-Moore和Quick Search串匹配算法进行分析的基础上,提出了一种更加快速的串匹配算法...在真实语料上的实验结果表明,QBM算法的效率较显著地高于原始的BM算法及其改进算法Improved Boyer-Moore(IBM)。

    C#,字符串匹配(模式搜索)Boyer Moore算法的源代码

    Boyer Moore 算法是字符串匹配(模式搜索)的主要高效算法之一。 Boyer-Moore(BM)算法被认为最高效的字符串搜索算法,它由Bob Boyer和J Strother Moore于1977年设计实现。通常情况下,Boyer Moore 算法比KMP算法...

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

    总之,AC_BM算法结合了Aho-Corasick算法的并行查找能力和Boyer-Moore算法的跳跃机制,为多模式字符串匹配提供了一种高效的解决方案。在实际编程实现中,理解算法原理、合理设计数据结构和优化细节是关键。通过阅读并...

    一种串匹配的快速Boyer_Moore算法.pdf

    QuickBoyer-Moore算法作为一种快速的串匹配算法,在Boyer-Moore算法的基础上进行了优化,充分利用了当前窗口的信息以及窗口后字符的信息,实现了更大的跳跃距离,从而提高了串匹配的效率。该算法在多个实际应用中...

    bm算法-C语言实现.docx

    bm算法是Boyer-Moore算法的简称,它是一种字符串搜索算法,用于在文本串中查找模式串。下面是bm算法的C语言实现的知识点: 相关概念 * 字符串搜索算法:bm算法是一种字符串搜索算法,用于在文本串中查找模式串。 *...

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

    **字符串匹配算法-BM算法的实现代码** 在计算机科学领域,字符串匹配算法是寻找一个字符串(称为模式)在另一个较大的字符串(称为文本)中的过程。BM(Boyer-Moore)算法是一种高效的字符串搜索算法,由Robert S. ...

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

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

    BM算法很详尽的算法讲解

    BM算法,全称为Boyer-Moore算法,是一种高效的字符串搜索算法,特别适用于大规模数据的搜索场景。与其他常见的字符串搜索算法(如KMP算法)不同,BM算法采取了一种从右至左的比较方式,并且结合了两个重要的启发式...

    AC-BM 多模式匹配算法

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

    boyer-moore-string-search:C语言中的Boyer Moore字符串搜索实现

    Boyer-moore-string-search 在C中的实现。 该算法从右到左向后执行匹配,并通过迭代匹配,模式移位,匹配,移位等进行操作。移位量是通过应用以下两个规则来计算的: 不良品格规则良好的后缀规则实际的偏移量是其中...

    字符串匹配之BM算法(英文)

    BM算法,全称为Boyer-Moore字符串搜索算法,是一种高效的字符串匹配算法。该算法由Robert Boyer和J Strother Moore提出,主要用于在一个主字符串(text)中查找模式字符串(pattern)的出现位置。BM算法的核心思想...

    bm.rar_串 匹配_字符串 匹配_字符串匹配_字符串匹配 c语言_瀛楃涓?鍖归厤

    这里的"bm"可能指的是Boyer-Moore算法,这是一种效率较高的字符串查找方法,它通过预处理模式字符串来减少不必要的比较,从而显著提高了匹配速度。 Boyer-Moore算法主要包含两个优化策略:坏字符规则和好后缀规则。...

    字符串匹配BM

    虽然Boyer-Moore算法的执行时间同样线性依赖于被搜索字符串的大小,但是通常仅为其它算法的一小部分:它不需要对被搜索的字符串中的字符进行逐一比较,而会跳过其中某些部分。通常搜索关键字越长,算法速度越快。它...

    基于字符串模式匹配算法的病毒感染检测问题_算法_数据结构_

    3. **Boyer-Moore算法**:根据模式字符串的字符出现频率构建跳跃表,使得在目标字符串中可以跳过部分字符,进一步提升效率。时间复杂度在最坏情况下为O(n + m)。 4. **Horspool算法**:是Boyer-Moore算法的简化版本...

    字符串匹配算法ppt

    在这个主题中,我们将探讨三种经典的字符串匹配算法:穷举法、KMP(Knuth-Morris-Pratt)算法和BM(Boyer-Moore)算法。 1. **穷举法**:也称为朴素匹配算法,是最直观的字符串匹配方法。它通过比较主串中的每个...

    BM.rar_Boyer Moore_bm_bm算法_tuned bm_visual c

    【BM算法详解与优化——Tuned Boyer-Moore算法在Visual C++中的实现】 Boyer-Moore(BM)算法是一种高效的字符串搜索算法,由Robert W. Moore和James H. Morris于1977年提出。这个算法以其高效性和在某些情况下的...

    Boyer-Moore算法

    c++ 实现高效的字符匹配B_M算法,该算法是在vc6.0下运行通过。。

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

    本篇文章将深入探讨如何使用C++实现Bad Character Rule(坏字符规则)和Good Suffix Rule(好后缀规则)来优化Boyer-Moore(BM)字符串匹配算法。BM算法以其高效的性能在文本搜索、数据挖掘等多个领域广泛应用。 ...

    BM字符串匹配算法.zip

    BM字符串匹配算法,全称是Boyer-Moore算法,是一种高效、实用的字符串搜索算法。这个算法由Robert S. Boyer和J Strother Moore在1977年提出,其主要特点是能够通过预处理模式字符串来减少不必要的比较,从而提高搜索...

Global site tag (gtag.js) - Google Analytics