写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站。博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事,做自己以后不会留有遗憾的事,做自己觉得有意义的事,不浪费这大好的青春年华。博主写博客目的是记录所学到的知识并方便自己复习,在记录知识的同时获得部分浏览量,得到更多人的认可,满足小小的成就感,同时在写博客的途中结交更多志同道合的朋友,让自己在技术的路上并不孤单。

目录:
1.BF算法原理
2.BF算法代码实现
3.BF算法的时间复杂度

1.BF算法原理

BF算法是串的模式匹配算法,通俗地理解,是一种用来判断两个串之间是否具有"主串与子串"关系的算法

普通模式匹配算法,其实现过程没有任何技巧,就是简单粗暴地拿一个串同另一个串中的字符一一比对,得到最终结果。例如,使用普通模式匹配算法判断串 A(“abcac”)是否为串 B(“ababcabacabab”)子串的判断过程如下:首先,将串 A 与串 B 的首字符对齐,然后逐个判断相对的字符是否相等,如图 所示:

上图第一次匹配失败是由于串 A 与串 B 的第 3 个字符匹配失败,因此需要将串 A 后移一个字符的位置,继续同串 B 匹配:

上图第二次匹配失败,串 A 继续向后移动一个字符的位置:

两串的模式匹配失败,串 A 继续移动,最终到下图:

由此,串 A 与串 B 以供经历了 6 次匹配的过程才成功,通过整个模式匹配的过程,证明了串 A 是串 B 的子串(串 B 是串 A 的主串)。

2.BF算法代码实现

#include <stdio.h>
#include <string.h>
//串普通模式匹配算法的实现函数,其中 B是伪主串,A是伪子串
int mate(char * B,char *A){int i=0,j=0;while (i<strlen(B) && j<strlen(A)) {if (B[i]==A[j]) {i++;j++;}else{i=i-j+1;j=0;}}//跳出循环有两种可能,i=strlen(B)说明已经遍历完主串,匹配失败;j=strlen(A),说明子串遍历完成,在主串中成功匹配if (j==strlen(A)) {return i-strlen(A)+1;}//运行到此,为i==strlen(B)的情况return 0;
}
int main() {int number=mate("ababcabcacbab", "abcac");printf("%d",number);return 0;
}
运行结果:6

3.BF算法的时间复杂度

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

解析BF(普通串模式匹配算法)算法相关推荐

  1. 串--串的定义,顺序、链式存储结构,BF、KMP模式匹配算法(C语言描述)

    此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.串(String)的定义: 串(String):由零个或多个字符组成的 ...

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

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

  3. 数据结构:KMP算法 串的模式匹配算法(全网最详细)

    目录 KMP模式匹配算法 简述 KMP模式匹配算法原理 如果人眼来优化的话,怎样处理         接下来我们自己来发现j的移动规律: 这一段公式证明了我们为什么可以直接将j移动到k而无须再比较前面 ...

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

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

  5. 4. 串的【朴素模式匹配算法】、【KPM算法:求next数组、nextval数组】

    串的模式匹配:在主串中,找到与模式串相同的子串,并返回其所在位置. 其实就是给出一个串abc,找到abc在主串的位置[abc都要匹配] 模式串:给出一个串abc 子串:主串中的abc[可能没有] 文章 ...

  6. 【考研】串的模式匹配算法——KMP算法(含真题)

    前言 本文内容源于对<数据结构(C语言版)>(第2版).王道讲解学习所得心得.笔记整理和总结,以便复习. 可搭配以下链接一起学习: [考研]<数据结构>知识点总结.pdf_考研 ...

  7. 数据结构笔记(十四)-- 串的模式匹配算法

    串的模式匹配算法 一.普通模式匹配算法 1.算法解析 普通模式匹配算法,其实现过程没有任何技巧,就是简单粗暴地拿一个串同另一个串中的字符一一比对,得到最终结果. 例如,使用普通模式匹配算法判断串 T( ...

  8. 串的子串(模式串)匹配算法

    一.串的模式匹配算法 1.算法目的: 确定主串中所含子串(模式串)第一次出现的位置(定位). 2.算法应用: 搜索引擎.拼写检查.语言翻译.数据压缩 3.算法种类: ●BF算法(Brute-Force ...

  9. [数据结构]模式匹配算法--KMP算法详解

    目录 一. 模式匹配 二. 模式匹配算法 1. 朴素模式匹配算法 2. KMP算法 1). KMP算法的优势 2). KMP算法的原理 3). next数组的构造 4). 利用next数组匹配的过程 ...

最新文章

  1. 解决SecureCRT中文显示乱码
  2. Flex 弹性盒基本语法
  3. C语言基础-基本算法
  4. vue2.0+stylus实现商品增加减少控制按钮组件
  5. Office 365开发者的前端必备课程
  6. Javaweb练手项目
  7. 利用matlab自带函数快速提取二值图像的图像边缘 bwperim函数
  8. Java项目--网页版音乐播放器(Spring Boot 后端逻辑)
  9. 中国房地产总市值与GDP的比例
  10. LINUX下截图快捷方式
  11. 从零到一实现一个CNI
  12. 语义标签(Semantic label)与多模态模型的一些关系
  13. 无刷直流电机 PWM控制
  14. git 主干修改合并到分支_git分支与主干合并操作
  15. html文字多余部分三个点,解决特殊符号和字母换行问题
  16. java计算月份所在的季度
  17. pl sql迁移oracle,Oracle数据库安装及使用PLSQL数据迁移
  18. 知到网课艺术与审美考试试题以及答案
  19. Creo4.0管道管线设计视频教程
  20. linux 文件中查找内容

热门文章

  1. 为什么ABAP整型的1转成string之后,后面会多个空格
  2. MySQL锁机制和PHP锁机制
  3. 《数据分析变革:大数据时代精准决策之道》一1.5 小结
  4. JAVA-WBE——spring security 3.2 认证-学习笔记2
  5. 解决ftp上传connection reset错误
  6. 企业级应用WebLogic11g集群配置与项目实施_WebLogic部署培训教程
  7. 如何才能在SQL查询器中使用语句查询出表的列名及数据类型(包括类型和长度)...
  8. wind2008中如何显示隐藏文件/夹
  9. WinForm窗体缩放动画
  10. [java]apache server与 tomcat 的区别以及整合