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算法的时间复杂度很高,也是一种蛮力的模式匹配算法,算法效率很低。
本文来自博客园,作者:咕噜咕噜咚c,转载请注明原文链接:https://www.cnblogs.com/hhhcy/p/16748714.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix