BF算法~

先来看BF算法是干嘛的

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

来看图解详细过程:

 还有在代码中所说的不能以主串的越界条件来判断是否将子串匹配完:

 

接下来来看代码:

int BF_Search(const char* str, const char* sub, int pos)
{
	assert(str != NULL && sub != NULL);
	if (pos < 0 || pos >= strlen(str))
	{
		return -1;
		//pos = 0; 这种pos越界的情况默认就是从头开始
	}

	int len_str = strlen(str);  //主串的长度
	int len_sub = strlen(sub);   //子串的长度

	int i = pos;//主串开始遍历的位置
	int j = 0; //子串开始的位置
	while (i < len_str && j < len_sub)
	{
		if (sub[j] == str[i])
		{
			i++;
			j++;
		}
		else
		{
			i = i - j + 1;
			j = 0;
		}
	}
	//这会儿循环退出了 要不是i > len_str 或者就是 j > len_sub  又因为主串是否退出不能代表子串与主串是否匹配成功  因此代码为:
	if (j >= len_sub)
	{
		return i - j;
	}
	else   //主串匹配完也没和子串匹配成功  则没有找到  返回-1
	{
		return -1;
	}

}

“要努力,但不要着急,任何硕果累累的结果都是过程的慢慢积累”

### BF算法概述 BF算法,即Brute Force算法,在计算机科学领域是一种经典的字符串匹配算法。该算法的核心思想是从主串的第一个字符开始逐一与模式串的字符进行比较,如果发现不匹配,则移动到下一个位置重新开始比较[^1]。 #### 算法特点 尽管BF算法在最坏情况下的时间复杂度较高(O(m*n),其中m为主串长度,n为模式串长度),但由于其实现简单直观,因此常被用于教学目的以及作为其他高效字符串匹配算法的基础。 以下是基于Java实现的BF算法源码示例: ```java public class BFA { public static int bfMatch(String text, String pattern) { int tLen = text.length(); int pLen = pattern.length(); for (int i = 0; i <= tLen - pLen; i++) { // 遍历主串 int j; for (j = 0; j < pLen && text.charAt(i + j) == pattern.charAt(j); j++); if (j == pLen) { // 如果完全匹配返回索引 return i; } } return -1; // 若未找到匹配项返回-1 } public static void main(String[] args) { String text = "hello world"; String pattern = "world"; System.out.println(bfMatch(text, pattern)); // 输出5表示匹配起始位置 } } ``` 此代码实现了基本的BF匹配逻辑并提供了简单的测试案例。 #### 时间复杂度分析 理论上与其他一些改进型算法相比,BF算法的时间复杂度相同或接近于这些算法的最佳表现形式;然而当遇到大量重复子结构或者特定输入序列时,由于缺乏预处理机制,它可能会退化至较差的表现状态[^2]。 #### 应用场景对比 相较于更为先进的KMP(Knuth-Morris-Pratt Algorithm)[^3], BM(Boyer Moore Algorithm), 或者Rabin-Karp等技术而言,BF方法虽然不具备任何特殊技巧去加速搜索过程,但在某些限定条件下仍具有一定的实用价值: - 对小型数据集操作足够迅速; - 编程容易理解和维护良好; - 不依赖额外存储空间支持运行环境受限场合下尤为适用. 值得注意的是,在现代软件工程实践中,通常会优先考虑那些经过优化后的替代方案以满足更高的性能需求. --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值