BF算法

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

算法思想

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

代码复杂度

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

例如,使用普通模式匹配算法判断串 A(“abcac”)是否为串 B(“ababcabacabab”)子串的判断过程如下:
首先,将串 A 与串 B 的首字符对齐,然后逐个判断相对的字符是否相等,如图 1 所示:
图 1 中,由于串 A 与串 B 的第 3 个字符匹配失败,因此需要将串 A 后移一个字符的位置,继续同串 B 匹配,如图 2 所示:
图 1 中,由于串 A 与串 B 的第 3 个字符匹配失败,因此需要将串 A 后移一个字符的位置,继续同串 B 匹配,如图 2 所示:
图 3 中,两串的模式匹配失败,串 A 继续移动,一直移动至图 4 的位置才匹配成功:
由此,串 A 与串 B 以供经历了 6 次匹配的过程才成功,通过整个模式匹配的过程,证明了串 A 是串 B 的子串(串 B 是串 A 的主串)。

BF算法实现(C语言版)

#include <stdio.h>
#include<string.h>
//strA是主串,strB是子串
int mate(char *strA, char *strB) {int i, j;i = j = 0;while (i < strlen(strA) && j < strlen(strB)) {if(strA[i]==strB[j]){i++;j++;} else{i=i-j+1;j=0;}}//判断字串情况如果到最后则遍历完毕找到匹配位置if(j== strlen(strB)){return i-j+1;}return 0;
}int main() {int num=mate("sadjijasidhhGoogle","Google");printf("%d",num);return 0;
}

总结

BF 算法的实现过程很 “无脑”,不包含任何技巧,在对数据量大的串进行模式匹配时,算法的效率很低。

BF算法(暴力算法)相关推荐

  1. BF算法(暴力算法)--模式匹配算法

    模式匹配算法:是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配.用途:搜索引擎.拼写检查.语言翻译.数据压缩等. BF算法:         ...

  2. BF与KMP算法详解

    日升时奋斗,日落时自省 目录 一.BF暴力算法 二.KMP算法 1.next数组 2.next数组优化(nextval) 一.BF暴力算法 暴力算法是普通的模式匹配算法 针对一个主串和一个子串,子串是 ...

  3. 字符串匹配算法——暴力算法

    字符串匹配算法--暴力算法,简称BF(BruteForce)BF(Brute\:Force)BF(BruteForce)算法. 基本思想:从主串(str)(str)(str)的第一个字符开始和子串(p ...

  4. 字符串匹配算法(BF算法KMP算法)

    字符串匹配算法 暴力匹配(BF)算法 KMP算法 next数组 求next数组的练习 next数组的优化(nextval数组) 练习 暴力匹配(BF)算法 BF算法,即暴力(Brute Force)算 ...

  5. 算法——暴力之美(volence‘s beautify of algorithm)

    暴力算法(volence's beautify of algorithm) 思想:利用暴力法的思想找到所有的解,然后从中选出符合问题要求的解 算法总结:暴力法的优点是实现简单,容易编程,但是往往会消耗 ...

  6. C语言||暴力算法解数独

    前言 前几天在玩解数独游戏时,发现有点费时间.心血来潮想实现一个解数独的c语言程序,根据我在晚解数独游戏的思路,采用了暴力算法求解.在数组维数的选择上,我选择了用一维数组实现. 分析 其实暴力算法求解 ...

  7. (C语言)数据结构算法-病毒感染检测(BF算法KMP算法)

    病毒感染检测: 医学研究者最近发现了某些新病毒,得知它们的DNA序列都是环状的.为了快速检测出患者是否感染了相应的病毒,研究者将患者的DNA和病毒的DNA均表示成一些字母组成的字符串序列,然后检测某种 ...

  8. 面试算法 井字游戏 算法:暴力算法

    1.题目:井字游戏 用字符串数组作为井字游戏的游戏板board,判断该游戏板有没有可能最终形成. 游戏板是一个3 x 3 数组,由字符"","X"和" ...

  9. CCF- CSP 202206-2寻宝!大冒险!暴力算法满分题解

    CCF- CSP 202206-2寻宝!大冒险!暴力算法满分题解 题目链接:202206-2寻宝!大冒险! 思路: 数据范围中n ≤ \leq ≤ 1000,S ≤ \leq ≤ 50,考虑时间复杂度 ...

  10. 根号算法——暴力美学

    零.前言 • 根号算法是一种很常见的算法 • 常见的根号思想有:双向搜索.根号分类讨论.根号重建.复杂 度平衡,以及一些根号级别的数据结构如分块和莫队 • 这些算法一般是多种暴力算法的结合,一般具有较 ...

最新文章

  1. 新手探索NLP(三)
  2. 安卓开发8-WebView支持文件上传
  3. l2_norm c++代码实现
  4. IIS7.5 中启用rest服务,Delete、Put
  5. 【业务知识】数字档案馆建设内容
  6. 盘一盘推荐系统里值得一读的那些论文
  7. python编程*三角形图形创意图片_python循环输出三角形图案的例子
  8. Google Guice范例解说之使用入门
  9. CodeForces - 858D Polycarp's phone book(字典树/map)
  10. 用camelot读取表格_如何使用Camelot从PDF提取表格
  11. python中列表和元组的相同点和不同点_详解Python语言中元组和列表的区别
  12. pdo oracle返回参数游标,PDOStatement::closeCursor
  13. 【M1兼容】阿里云盘小白羊版 Mac版(支持满速)
  14. Magento: 获取类别所有子类别 (无限级别-目录树) Get All Sub Categories
  15. Psych112R Cognitive Robotics Midterm Laboratory
  16. Bailian2737 大整数除法【大数】
  17. python修饰符号的使用_Python 函数修饰符(装饰器)的使用
  18. 谁是杨强?首位AAAI华人主席,身兼5大顶级组织Fellow,也是华为诺亚方舟实验室开创者...
  19. Android View的滚动原理简单解析
  20. 0基础入门VTD-实操静态道路建模3

热门文章

  1. java.lang.ExceptionInInitializerError异常
  2. 【毕业设计系列】005:视频图像数字水印matlab GUI系统设计
  3. CapstoneCS5265设计原理图|CS5265设计DP转HDMI2.0 4K60HZ转换电路|CS5265demoboard
  4. dumprep 0 -u 到底是什么东西?
  5. 服务器不能使用无线键盘,无线键盘突然没反应怎么回事_无线键盘没反应的解决方法...
  6. iPhone手机ipa破解补丁安装方法和ipa软件游戏安装教程(1)
  7. C# WinForm菜单和工具栏控件
  8. DotNetCasClient 如何获取Cas服务器返回的attributes中的数据
  9. 域名指向主机IP地址,通过域名:8080才能访问网站,去掉后面的8080;或者其他的端口号,直接使用域名访问网站
  10. 离京前记--带宝贝爬长城小感想