首页 > 编程语言 >BF(暴力求解算法)

BF(暴力求解算法)

时间:2022-10-02 14:23:01浏览次数:51  
标签:字符 BF 匹配 abcac 求解 算法 模式匹配

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算法的时间复杂度很高,也是一种蛮力的模式匹配算法,算法效率很低。

标签:字符,BF,匹配,abcac,求解,算法,模式匹配
From: https://www.cnblogs.com/hhhcy/p/16748714.html

相关文章

  • C++实现双向RRT算法
    C++实现双向RRT算法背景介绍RRT(Rapidly-exploringRandomTrees)是StevenM.LaValle和JamesJ.KuffnerJr.提出的一种通过所及构建空间搜索树实现对非凸高维空间快速搜......
  • 字符串匹配基础(上):如何借助哈希算法实现高效字符串匹配?
    链接:https://time.geekbang.org/column/article/71187目录字符串匹配算法BF算法RK算法字符串匹配算法BF算法、RK算法、BM算法、KMP算法BF算法和RK算法:单模......
  • KMP算法
    KMP算法首先kmp算法有两个字符串,一个目标串s[],一个模板串p[]我们需要对模板串进行预处理,创建一个数组ne[i]表示以p[i]为结尾的字符串和前缀相等字符串的最长长度,就是前缀......
  • 对于关键路径算法中最迟发生时间取最小值的理解
    问题产生:错误理解:当前事件的最迟发生时间vl(i)的产生跟与之直接关联的后继事件j和中间活动<i,j>有关,如果要使当前事件发生的时间“最晚”,应当取集合{j}中产生的最大......
  • 基础算法五大板块
    基础动态规划基础的DP题目,模板题等。基础图论基础的最短路,最小生成树,拓扑排序等算法基础数学基础数论基础字符串基础算法骗分必备......
  • python关于算法题的输入
    关于Python算法题的输入处理最近在准备蓝桥杯,打算报Python组,所以开始尝试用Python刷算法题。【python&ACM输入输出的处理:sys.stdin.readline().strip().split())】上......
  • 高级算法/数据结构
    AhoCorasick自动机用于多模式字符串匹配。可持久化线段树利用前缀和思想求区间第k小等不易直接求出的值。后缀数组Manacher求最长回文串。......
  • 【WSN定位】基于改进chan算法和talor算法实现多基站目标定位附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 【无人机】基于A星算法和B次样条实现危险模型实现无人机三维航迹规划附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 算法题目(1)
    题目1给定一个有序数组arr,代表坐落在X轴上的点给定一个正数K,代表绳子的长度返回绳子最多压中几个点?即使绳子边缘处盖住点也算盖住输入:第一行arr的size,k第二行arr......