字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore)。两个算法在最坏情况下均具有线性的查找时间。但是在实用上,KMP算法并不比最简单的c库函数strstr()快多少,而BM算法则往往比KMP算法快上3-5倍。
但是,最坏的情况下,BM的时间复杂度貌似也是n×n。
具体就不说了,BM算法是通过往后跳动主文本字符串来实现快速非回溯查找的,跳动的算法就是用程序中的这句来实现的,下面:
- i=i+m-min(j,1+last(p,T[i]));
而last是一个求文本字符串中的字符在查找字符串里面出现的最后位置。
这个算法很麻烦,呵呵,可以的话百度一下。
整个代码如下:
-
#include<string.h>
-
intlast(char*p,charc){
-
intlength=strlen(p),count=0;
-
char*pp=p+length-1;
-
while(pp>=p)
- {
-
if(*pp==c)
- {
-
returnlength-count-1;
- }
- pp--;
- count++;
- }
-
return-1;
- }
-
intmin(inta,intb){
-
return(a<=b)?a:b;
- }
-
intBM_index(char*T,char*p){
-
intn=strlen(T);
-
intm=strlen(p);
-
inti=m-1,j=m-1;
-
while(i<=n-1)
- {
-
if(T[i]==p[j])
- {
-
if(j==0)
- {
-
returni;
- }
-
else
- i--,j--;
- }
-
else{
-
i=i+m-min(j,1+last(p,T[i]));
- j=m-1;
- }
- }
-
return-1;
- }
-
int_tmain(intargc,_TCHAR*argv[])
- {
-
char*p="woainizz!izzzzzz--zzzzut";
-
inta=BM_index(p,"zzzzut");
-
return0;
- }
分享到:
相关推荐
在对经典的Boyer-Moore和Quick Search串匹配算法进行分析的基础上,提出了一种更加快速的串匹配算法...在真实语料上的实验结果表明,QBM算法的效率较显著地高于原始的BM算法及其改进算法Improved Boyer-Moore(IBM)。
Boyer Moore 算法是字符串匹配(模式搜索)的主要高效算法之一。 Boyer-Moore(BM)算法被认为最高效的字符串搜索算法,它由Bob Boyer和J Strother Moore于1977年设计实现。通常情况下,Boyer Moore 算法比KMP算法...
总之,AC_BM算法结合了Aho-Corasick算法的并行查找能力和Boyer-Moore算法的跳跃机制,为多模式字符串匹配提供了一种高效的解决方案。在实际编程实现中,理解算法原理、合理设计数据结构和优化细节是关键。通过阅读并...
QuickBoyer-Moore算法作为一种快速的串匹配算法,在Boyer-Moore算法的基础上进行了优化,充分利用了当前窗口的信息以及窗口后字符的信息,实现了更大的跳跃距离,从而提高了串匹配的效率。该算法在多个实际应用中...
bm算法是Boyer-Moore算法的简称,它是一种字符串搜索算法,用于在文本串中查找模式串。下面是bm算法的C语言实现的知识点: 相关概念 * 字符串搜索算法:bm算法是一种字符串搜索算法,用于在文本串中查找模式串。 *...
**字符串匹配算法-BM算法的实现代码** 在计算机科学领域,字符串匹配算法是寻找一个字符串(称为模式)在另一个较大的字符串(称为文本)中的过程。BM(Boyer-Moore)算法是一种高效的字符串搜索算法,由Robert S. ...
除了BM和KMP,还有许多其他的字符串匹配算法,如Boyer-Moore-Horspool算法(改进的BM),Rabin-Karp算法(使用哈希函数进行匹配),Sunday算法,以及AC自动机(Aho-Corasick算法)等。这些算法各有优缺点,适用于...
BM算法,全称为Boyer-Moore算法,是一种高效的字符串搜索算法,特别适用于大规模数据的搜索场景。与其他常见的字符串搜索算法(如KMP算法)不同,BM算法采取了一种从右至左的比较方式,并且结合了两个重要的启发式...
AC-BM(Aho-Corasick-BM)算法是一种结合了Aho-Corasick算法和Boyer-Moore算法的字符串匹配方法,主要用于在一个大文本串中高效地查找多个模式串。这种算法提高了在大量模式下搜索文本的效率,减少了不必要的比较...
Boyer-moore-string-search 在C中的实现。 该算法从右到左向后执行匹配,并通过迭代匹配,模式移位,匹配,移位等进行操作。移位量是通过应用以下两个规则来计算的: 不良品格规则良好的后缀规则实际的偏移量是其中...
BM算法,全称为Boyer-Moore字符串搜索算法,是一种高效的字符串匹配算法。该算法由Robert Boyer和J Strother Moore提出,主要用于在一个主字符串(text)中查找模式字符串(pattern)的出现位置。BM算法的核心思想...
这里的"bm"可能指的是Boyer-Moore算法,这是一种效率较高的字符串查找方法,它通过预处理模式字符串来减少不必要的比较,从而显著提高了匹配速度。 Boyer-Moore算法主要包含两个优化策略:坏字符规则和好后缀规则。...
虽然Boyer-Moore算法的执行时间同样线性依赖于被搜索字符串的大小,但是通常仅为其它算法的一小部分:它不需要对被搜索的字符串中的字符进行逐一比较,而会跳过其中某些部分。通常搜索关键字越长,算法速度越快。它...
3. **Boyer-Moore算法**:根据模式字符串的字符出现频率构建跳跃表,使得在目标字符串中可以跳过部分字符,进一步提升效率。时间复杂度在最坏情况下为O(n + m)。 4. **Horspool算法**:是Boyer-Moore算法的简化版本...
在这个主题中,我们将探讨三种经典的字符串匹配算法:穷举法、KMP(Knuth-Morris-Pratt)算法和BM(Boyer-Moore)算法。 1. **穷举法**:也称为朴素匹配算法,是最直观的字符串匹配方法。它通过比较主串中的每个...
【BM算法详解与优化——Tuned Boyer-Moore算法在Visual C++中的实现】 Boyer-Moore(BM)算法是一种高效的字符串搜索算法,由Robert W. Moore和James H. Morris于1977年提出。这个算法以其高效性和在某些情况下的...
c++ 实现高效的字符匹配B_M算法,该算法是在vc6.0下运行通过。。
本篇文章将深入探讨如何使用C++实现Bad Character Rule(坏字符规则)和Good Suffix Rule(好后缀规则)来优化Boyer-Moore(BM)字符串匹配算法。BM算法以其高效的性能在文本搜索、数据挖掘等多个领域广泛应用。 ...
BM字符串匹配算法,全称是Boyer-Moore算法,是一种高效、实用的字符串搜索算法。这个算法由Robert S. Boyer和J Strother Moore在1977年提出,其主要特点是能够通过预处理模式字符串来减少不必要的比较,从而提高搜索...