新闻资讯
看你所看,想你所想

BF算法

BF算法

BF算法

BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字元与模式串T的第一个字元进行匹配,若相等,则继续比较S的第二个字元和 T的第二个字元;若不相等,则比较S的第二个字元和T的第一个字元,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。

基本介绍

  • 中文名:BF算法
  • BF:Brute Force
  • 属于:普通的模式匹配算法
  • 最坏情况:要进行M*(N-M+1)次比较

算法思想

首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一直到T[M]为止;若S[1]和T[1]不等,则S向右移动一个字元的位置,再依次进行比较。如果存在k,1≤k≤N,且S[k+1…k+M]=T[1…M],则匹配成功;否则失败。
该算法最坏情况下要进行M*(N-M+1)次比较,时间複杂度为O(M*N)。
举例说明
S: ababcababa
T: ababa
BF算法匹配的步骤如下:
i=0, j=0
i=1, j=1
i=2,j=2
i=3, j=3
i=4, j=4(失败)
ababcababa
ababcababa
ababcababa
ababcababa
ababcababa
ababa
ababa
ababa
ababa
ababa
i=1,j=0(失败)
ababcababa
ababa
i=2,j=0
i=3,j=1
i=4,j=2(失败)
ababcababa
ababcababa
ababcababa
ababa
ababa
ababa
i=3,j=0(失败)
ababcababa
ababa
i=4,j=0(失败)
ababcababa
ababa
i=5,j=0
i=6,j=1
i=7,j=2
i=8,j=3
i=9,j=4(成功)
ababcababa
ababcababa
ababcababa
ababcababa
ababcababa
ababa
ababa
ababa
ababa
ababa

C语言实现:

int Index(SString S,SString T,int pos)
{ /* 返回子串T在主串S中第pos个字元之后的位置。若不存在,则函式值为0。 */
/* 其中,T非空,1≤pos≤StrLength(S)。算法4.5 */
int i,j;
if(1<=pos&&pos<=S[0])
{
i=pos;
j=1;
while(i<=S[0]&&j<=T[0])/*S[0],T[0]中存放的为串长*/
if(S[i]==T[j]) /* 继续比较后继字元 */
{
++i;
++j;
}
else /* 指针后退重新开始匹配 */
{
i=i-j+2;
j=1;
}
if(j>T[0])
return i-T[0];
else
return 0;
}
else
return 0;
}

相关推荐

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:yongganaa@126.com