BF算法的概念

现在有两个串,主串(文本串)M,子串(模式串)P。串的模式匹配就是在主串M中寻找子串的位置,就是子串的定位运算。

BF算法是串的暴力匹配算法,它的时间复杂度是很高的,也就是采用穷举的方法一个一个检查主串中是否能匹配到子串。

BF算法的原理

  从文本串的指定位置与模式串的第一个位置开始逐个比较字符是否相同。可以设置两个指针i、j分别指向串M、串P的起始位置,比较M[i]和P[j],如果两个字符相等,i、j都加一(即串M和串P右移一格);如果M[i]!=P[j],则将i加一,j=0,进行文本串的下一次比较。

C++代码实现

int Index_BF(string M,string P,int position=0)
{//返回模式串P在主串中第position个字符开始第一次出现的位置。如果不存在,返回-1
//其中,P非空,0<=position<=M.length int i=position,j=0;//初始化,i是M的指针,j是P的指针 while(i<M.length()&&j<P.length()){if(M[i]==P[j]){++i;++j;}else{i=i-j+1;j=0;}} //指针成功完成所有比对,匹配成功 if(j>=P.length())return i-P.length();//匹配失败,说明文本串中不存在模式串,返回-1elsereturn -1;
}

算法分析

设文本串长度m,模式串长度n

BF算法最好的情况是第一次就匹配成功,时间复杂度为O(n)

最坏情况是最后匹配成功,时间复杂度为O(m*n)

BF算法(Brute-Force)算法原理及C++实现相关推荐

  1. Brute Force算法介绍及C++实现

    字符串的模式匹配操作可以通过Brute Force算法来实现.字符串匹配操作即是查看S串(目标串或主串)中是否含有T串(模式串或子串),如果在主串中查找到了子串,则模式匹配成功,返回模式串中的第一个字 ...

  2. 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)

    #笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...

  3. BF算法和KMP算法

    给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式.这里将介绍处理串匹配问题的两种算法,BF算法和KMP算法. BF算法 (暴力匹配 ...

  4. 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)

    一.实验目的 1.了解串的基本概念. 2.掌握串的模式匹配算法的实现 . 二.实验预习 说明以下概念 1.模式匹配: 串的模式匹配就是子串的定位运算. 设有两个字符串 S 和 T ,S为主串(正文串) ...

  5. BF算法与KMP算法详解

    目录 一.前言 二.BF算法 代码: 三.KMP算法 next数组: 关于为什么要找最长匹配前后缀: 代码: KMP: 代码: 三.代码汇总: 一.前言 说到字符串匹配,就不得不提BF算法和KMP算法 ...

  6. 【算法篇-字符串匹配算法】BF算法和KMP算法

    目录 前言 1. BF算法 1.1 画图分析 1.3 BF 算法的时间复杂度 2. KMP 算法 2.1 KMP 算法和 BF 算法 的区别 2.1.1 为什么主串不回退? 2. 2 next 数组 ...

  7. DVWA学习(三)Brute Force(暴力破解)

    BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相 ...

  8. 蛮力写算法_蛮力算法解释

    蛮力写算法 Brute Force Algorithms are exactly what they sound like – straightforward methods of solving a ...

  9. JavaScript实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)

    JavaScript实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码) bfMaximumSubarray.js完整源代码 bfMaximumSuba ...

  10. 吴昊品游戏核心算法 Round 7 —— 熄灯游戏AI(有人性的Brute Force)(POJ 2811)

    暴力分为两种,一种属于毫无人性的暴力,一种属于有人性 的暴力.前面一种就不说了,对于后面一种情况,我们可以只对其中的部分问题进行枚举,而通过这些子问题而推导到整个的问题中.我称之为有人性的Brute ...

最新文章

  1. 算法提高课-图论-负环-AcWing 361. 观光奶牛:spfa判正环、负环、01分数规划、二分
  2. 算法复杂度分析(下):最好、最坏、平均、均摊等时间复杂度概述
  3. pdf在线翻译_如何免费快速地翻译pdf英文文档,并保留很好的格式?
  4. Linux设备驱动程序学习-Linux设备模型(总线、设备、驱动程序和类)
  5. [设计模式] - Proxy代理模式
  6. 看看什么样的人适合网上开店( 转载)
  7. html的meta标签的作用
  8. 狂神说springboot源码_狂神说SpringBoot04:JSR303数据校验及多环境切换
  9. 使用uboot + minicom串口协议下载镜像文件
  10. 爬取新浪微博(一)Scrapy入门教程
  11. static、const、volatile等关键字作用
  12. RIFF和WAVE文件格式
  13. 个推透传消息设置通知栏展示 ios_企微功能十问 | 企业微信如何开启聊天侧边栏功能,有什么用?...
  14. raspberry pi_我如何从Mac Mini迁移到Raspberry Pi
  15. 2021.3.17丨致病菌毒力因子(VFDB)数据库注释
  16. 上海理工大学高校计算机补办,上海理工大学关于2017上海市高校计算机等级考试报考通知...
  17. 用开源代码如何建立网站_建立更可插拔的开源文化
  18. 20代年轻人成韩国最积极的加密货币投资群体
  19. Android禁用截屏
  20. PS调色 复古色花朵

热门文章

  1. es - elasticsearch search - DSL - decay functions
  2. 《算法艺术与信息学竞赛》之 递推 例一 月亮之眼 vijos 1540
  3. 操作系统——内核雏形
  4. 【Tensorflow教程笔记】TensorFlow Serving
  5. 浅谈韦达定理的“来龙去脉”
  6. 每天接触互联网 了解互联网是什么
  7. C/C++存储区域划分(栈区,堆区,全局区,代码区)
  8. 用lua随手写的扑克发牌方案
  9. [图论]最大流问题(Maximum flow)的定义
  10. 【d3】树图-各种效果集合(附效果图)