BF(暴力求解算法)

BF(暴力求解算法)


即是暴力(BruteForce)算法,是普通的模式匹配算法,BF算法的思想就是将目标串T的第一个字符和主串的S的第一个字符进行匹配,若相等,则则继续匹配T串和S串的第二个字符,若不相等,则比较主串S的第二个字符和模式串T的第二个字符,依次比较下去,知道得到最后的匹配结构。BF算法也是一种蛮力算法。

算法思想:

普通模式匹配算法,其实现过程没有任何技巧,就是简单粗暴地拿一个串同另一个串中的字符一一比对,得到最终结果。

代码复杂度:O(n*m)

该算法最理想的时间复杂度 O(n),n 表示串 A 的长度,即第一次匹配就成功。
BF 算法最坏情况的时间复杂度为 O(n *m),n 为串 A 的长度,m 为串 B 的长度。例如,串 B 为 “0000000001”,而串 A 为 “01”,这种情况下,两个串每次匹配,都必须匹配至串 A 的最末尾才能判断匹配失败,因此运行了 n *m 次。

演示过程:

使用普通模式匹配算法判断串 A(“abcac”)是否为串 B(“ababcabacabab”)子串的判断过程如下:

1.首先,将模式串和主串对齐,依次进行匹配是否相等

B:ababcabcacbab

A:abcac

2.若不相等,B串开始回溯,从第二个字符开始与A串的第一个字符开始匹配是否相等

B:ababcabcacbab

A: abcac

3.若不相等,B串开始回溯,从第三个字符开始与A串的第一个字符开始匹配是否相等

B:ababcabcacbab

A: abcac

4.两串的模式匹配失败,串 A 继续移动,一直移动至匹配的位置才匹配成功:

B:ababcabcacbab

A: abcac

由此,串 A 与串 B 以供经历了 6 次匹配的过程才成功,通过整个模式匹配的过程,证明了串 A 是串 B 的子串(串 B 是串 A 的主串)。

BF算法实现-C语言

#include <stdio.h>
#include <string.h>
int BF(char *S,char *T,int pos)
{
	int i = pos;//开始匹配的位置
	int j = 0;
	if (pos<1 || pos>strlen(S))
	{
		printf("匹配位置有误!");
		return 0;
	}
	while (i<=strlen(S) && j<=strlen(T))
	{
		if (S[i - 1] == T[j])
		{
			++i;
			++j;
		}
		else
		{
			i = i - j + 1;
			j = 0;
		}
	}
	if (j == strlen(T))
		return i - strlen(T);
	else
		return 0;
}
int main()
{
	printf("BF算法:模式串T在主串S中的位置是:%d" ,BF("HELLO WORLD program", "gram", 1));
	return 0;;
}

总结:

BF算法的时间复杂度很高,也是一种蛮力的模式匹配算法,算法效率很低。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尔冬易前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值