BF算法的概念
? 现在有两个串,主串(文本串)M,子串(模式串)P。串的模式匹配就是在主串M中寻找子串的位置,就是子串的定位运算。
? BF算法是串的暴力匹配算法,它的时间复杂度是很高的,也就是采用穷举的方法一个一个检查主串中是否能匹配到子串。
BF算法的原理
??从文本串的指定位置与模式串的第一个位置开始逐个比较字符是否相同。可以设置两个指针i、j分别指向串M、串P的起始位置,比较M[i]和P[j],如果两个字符相等,i、j都加一(即串M和串P右移一格);如果M[i]!=P[j],则将i加一,j=0,进行文本串的下一次比较。
C++代码实现
int Index_BF(string M,string P,int position=0)
{//返回模式串P在主串中第position个字符开始第一次出现的位置。如果不存在,返回-1
//其中,P非空,0<=position<=M.length
int i=position,j=0;
//初始化,i是M的指针,j是P的指针
while(i<M.length()&&j<P.length())
{
if(M[i]==P[j])
{
++i;
++j;
}
else
{
i=i-j+1;
j=0;
}
}
//指针成功完成所有比对,匹配成功
if(j>=P.length())
return i-P.length();
//匹配失败,说明文本串中不存在模式串,返回-1
else
return -1;
}
算法分析
设文本串长度m,模式串长度n
BF算法最好的情况是第一次就匹配成功,时间复杂度为O(n)
最坏情况是最后匹配成功,时间复杂度为O(m*n)
|