当前位置: 首页 > news >正文

BF算法(暴⼒算法)-- 模式匹配算法

引言

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

暴⼒算法(BF算法)

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

在这里插入图片描述

暴力求解法

暴力求解法 : 又名直接带入法(Directly Calculating)它是已知最古老的算法之一,与"直观目测法","心灵感应法"并称世界三大不可思议数学计算法则, 其可追溯至3200年前,古老的埃及人便开始使用象形文字进行复杂的数学演算。

在这里插入图片描述

模式匹配算法

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

算法思想

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

代码复杂度

该算法最理想的时间复杂度 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算法实现(JAVA 语言版)


public static void main(String[] args) {String strA ="ababcabcacabacabab";String strB ="abcac";int lastInde1=strA.lastIndexOf("abcac");//字符串第一个字符最后出现的下标if(lastInde1==-
http://www.xdnf.cn/news/835867.html

相关文章:

  • 《鸟哥Linux私房菜》学习笔记
  • 异步调用的理解
  • mysql select内部原理_数据库SQL SELECT查询的工作原理
  • 【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件
  • mysql通配符_MySQL 通配符学习小结
  • windows系统中查看linux分区的三种方式
  • sqlite 和berkeley db 的性能比较
  • 项目目标和期望未被清晰传达,如何改进?
  • 百度基本搜索技巧
  • 文件传输中的MD5校验技术
  • 使用libxml2解析XML文件
  • 压箱底的8个网站,各种高效工具应有尽有
  • 计算机网络笔记整理(第七版)谢希仁
  • C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)
  • 析取范式和合取范式
  • 什么是延时电路?6种延时电路原理讲解
  • Python的类变量、实例变量
  • Java与JavaScript的区别与联系:有人的地方就有江湖,有浏览器的地方就有JavaScript
  • 5个实用的性能测试工具(软件测试工程师必备)_性能测试用例用什么软件
  • (八)面向对象的特征
  • OPNET入门1-第一个仿真例子(Small Internetworks)
  • ad603中文资料
  • 404 Not Found错误页面的解决方法和注意事项
  • iscsi常用命令
  • MonkeyRunner简介
  • sis最新地址获取方法_拳头最新FPS游戏VALORANT资格免费获取方法
  • 谈《黑社会之龙城岁月》中之大D
  • 密码学基础
  • ExploitDB漏洞库
  • ligerUI框架