BF算法(Brute-Force)算法原理及C++实现

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)

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值