BF算法及KMP算法

BF算法和KMP算法详解 串匹配问题 给定两个字符串S和T,在主串S中查找子串T的过程称之为串匹配(模式匹配),T称之为模式。这样一类的问题在实践中应用非常广泛。在文本处理系统、操作系统、编译系统、数据库系统以及Internet信息检索系统中,串匹配都是使用最频繁的操作。 一般来说,串匹配问题具有以下的特征: 问题输入规模很大,常常要在大量信息中进行匹配。因此,算法执行依次的时间也不可忽视 匹配操作经常被调用,执行频率很... 阅读详情

一.BF算法
1.原理
暴力查找
逐个匹配主串字符,然后模式串j值回溯到1重新匹配
2.代码实现
在这里插入图片描述
二.KMP算法
1.原理
核心是避免不必要的回溯
问题是由模式串决定,不是目标串决定
只需要将j值模式串中j的位置回溯到next[j]位,而免除了前面不需要的匹配,以此来换取时间
2.难点拆解
①前后缀
在这里插入图片描述
②推导next数组
利用已经部分匹配这个有效信息,保持i指针不回溯,通过修改j指针,让模式串尽量地移动到有效的位置

next数组:当模式匹配T失败时,next数组对应的元素指导应该用T串的哪个元素进行下一轮的匹配
有点像递归,自己调动自己,当前面失配的时候,j就在失配的地方回溯,因而j = next[j]

3.代码实现在这里插入图片描述在这里插入图片描述
4.KMP算法改进
一个例子:
主串s=“aaaaabaaaaac”
子串t=“aaaaac”
这个例子中当‘b’与‘c’不匹配时应该‘b’与’c’前一位的‘a’比,这显然是不匹配的。'c’前的’a’回溯后的字符依然是‘a’。
我们知道没有必要再将‘b’与‘a’比对了,因为回溯后的字符和原字符是相同的,原字符不匹配,回溯后的字符自然不可能匹配。但是KMP算法中依然会将‘b’与回溯到的‘a’进行比对。这就是我们可以改进的地方了。
KMP算法的改进可以简述为: 如果a位字符与它next值指向的b位字符相等,则该a位的next就指向b位的next值,如果不等,则该a位的next值就是它自己a位的next值。
在这里插入图片描述

C++实现BF算法和KMP算法 给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式。这里将介绍处理串匹配问题的两种算法,BF算法和KMP算法。 阅读详情

相关推荐

串匹配——bf、kmp、bm算法

问题描述:给定一个文本,在该文本中查找并定位任意给定字符串:给定两个串和,在主串S中查找子串T的过程,T为模式。 1、bf算法 蛮力法 对主串与模式串一个一个进行比较,若不匹配,则模式串从第一个字符开始,主串往后一个字符,再进行下一趟比较;若匹配,则模式串与主串字符往后进行比较。 直到主串s所剩字符长度小于模式串t长度或模式串所有字符比较完毕。 #include<stdio.h&...

yisandezhuiqiu的博客 2359

BF,KMP算法(万字图文详解)

BF,KMP算法(万字图文详解)

weixin_64067830的博客 7万+

一篇文章带你通关BF算法与KMP算法

对于两个字符串,在主串中s中查找是否存在某一个子串t(一个串中任意个连续字符组成的子序列(包含空串)称为该串的子串),如果存在则返回串t在串s中第一次出现的位置。串s为主串,子串t成为模式串,这个过程也称为模式匹配*,下面来详细介绍下串的两种模式匹配算法:BF算法和KMP算法 1.BF算法 BF算法也称暴力匹配算法或有回溯的匹配算法,具体步骤为: 从主串s的第一个字符开始与t的第一个字符做比较 如果相等,继续逐个比较后续的字符 如果不相等,使主串的第二个字符与t的第一个字符比较 如果相等,继续逐个比较后续

qq_46213710的博客 1269

KMP算法

KMP算法,next数组,nextval数组

m0_63282219的博客 874

西门子S7-1200的PID应用(恒温热水器)

物料清单:1200PLC一台,模拟量输入模块SM1231(PLC自带的输入通道不支持4-20mA电流输入)一个,PT100一个,温度变送器,热得快,固态继电器。 第一步,硬件接线; 第二步,新建1200工程,添加PLC和模拟量输入模块,修改模块的模拟量输入类型为4-20mA,模拟量模块的IO地址为96-103(8个字); 第三步,新建循环组织块OB30,循环时间选择默认点1...

weixin_30835649的博客 6549

[LaTeX] 调整参考文献的格式(References),包括作者名缩写,行距,字体,引用顺序等等

在此记录我对LaTeX中参考文献references的尝试,主要涵盖如题几个方面。

the Blog of 等不到天亮丶等时光 4万+

【算法】串的模式匹配——BF算法与KMP算法详解

本文属于【算法】系列文章,主要介绍针对“串”数据结构的两种常用模式匹配算法,即BF算法与KMP算法。 本文从原始的BF算法开始讨论其实现以及缺陷并设想解决方案,以此引出KMP算法的设计思路,并抛出KMP算法的重要部件——next表的得出方法及代码实现,最后总结了nextval表的计算步骤。

Ethan's blog 2381

AlphaPose复现配置教程

AlphaPose是一种准确的多人姿态估计器,这是第一个在COCO数据集上达到70+ mAP (75 mAP)和在MPII数据集上达到80+ mAP (82.1 mAP)的开源系统。为了匹配跨帧的同一人的姿态,我们还提供了一种高效的在线姿态跟踪器,称为Pose Flow。这是第一个在PoseTrack挑战数据集上达到60+ mAP (66.5 mAP)和50+ MOTA (58.3 MOTA)的开源在线姿态跟踪器。AlphaPose支持Linux和Windows操作系统!指路👉。

m0_56661101的博客 4527

字符串的模式匹配--BF算法&KMP算法

BF算法是基于主串指针回溯,重新与子串进行逐字符进行比较,主串为S什么要进行回溯呢,原因在于模式P中存在相同的字符或者说由字符(串)存在重复(模式的部分匹配性质),设想如果模式P中字符各不相同,主串就S的指针就根本不需要回溯;然而,我们可以发现在主串S与模式发生失配时,主串指针进行回溯会影响效率,因为由于模式S本身字符的部分部分匹配性质,回溯之后,主串S与模式T有些部分比较是没有必要的,这就是对BF

Death Note 9678

配置权重_高盛都在用的资产配置模型,BL贝叶斯框架改进Markowitz

前面我们说到,markoviz的均值-方差模型,第一次,用数学的方式严格证明了投资组合存在最优的权重,但它的学术意义大于实战。主要原因有两个:1,人们很难有效的预测期望收益率;2,最优资产组合配置对输入非常敏感,结果往往难以被人理解。还有就是在投资中,定量只是完成初步构建,同步的定性判断依然非常重要:第一,投资者的认知偏好:倾向于关注他们认为被低估,但有发展潜力或者可以确定相对交易价值的小部分股票...

weixin_39892309的博客 716

Clawdbot安装教程:从零开始到接入飞书

这几天,Clawdbot把整个科技圈都刷屏了。就是这个胖逼小龙虾🦞。不过现在改名叫Moltbot了。原因很简单:被Anthropic告了。Anthropic觉得Clawdbot这名字太像Claude Code的延伸产品,要求改名。真的,Anthropic你这家伙…更离谱的是,因为Clawdbot太火,Mac Mini都被抢断货了。无数人为了用它,疯狂买Mac Mini。我刚打开美团外卖,发现居然没货了???

Maynor的博客 2179

BF算法与KMP算法详解

挺容易忘的

m0_61721774的博客 4398

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 564

最详BF算法和KMP算法

本篇文章主要时写出了BF算法和KMP算法,以及总结了两种算法的区别与优缺点。

&volume的博客 3125

一文吃透:从零到一开发一套 ABAP RAP 应用的完整路径

ABAP RAP开发实战摘要 本文系统介绍了ABAP RESTful Application Programming Model (RAP)在企业级应用开发中的实施路径。文章以出差申请业务场景为例,详细拆解了RAP开发的六步主线流程: 数据库表设计:规范主键、审计字段设计 CDS数据建模:通过视图定义业务对象实体及关联 行为定义与实现:使用BDEF声明事务规则,Behavior Pool类实现业务逻辑 业务对象投影:裁剪服务接口视图 服务定义与绑定:按OData协议暴露服务 UI集成测试:支持Fiori E

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 509

HFSS实战项目——GPS北斗双模微带天线

本文设计了一款方形圆极化微带天线应用于北斗B1和GPSL1频段,满足高增益、低VSWR、适当方向图等要求。设计中心频率为1568MHz,介质板采用厚度h=1.6mm的Arlon AD450(tm)板,相对介电常数为4.5,采用探针馈电。

2401_87464239的博客 1769

【算法笔记】BF 和 KMP 算法

文章目录1. BF 算法1.1 介绍1.2 模拟过程(思想)1.3 示例代码1.4 时间复杂度2. KMP 算法2.1 介绍2.2 模拟过程(思想)2.2.1 整体思路2.2.2 主串的索引不回退2.2.3 子串的索引回退的位置2.2.4 next 数组的实现方法2.2.5 next 数组的优化2.3 示例代码2.4 时间复杂度 1. BF 算法 1.1 介绍 BF 算法,即暴力算法,是普通的模式匹配算法。BF 算法的思想就是将主串 S 的第一个字符与子串 T 的第一个字符进行匹配。若相等,则继续比较 S

吞吞吐吐大魔王的博客 2435

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

BF算法和KMP算法

即暴力(BruteForce)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;我们发现,第三个并不匹配,所以需要回溯,那么我们就需要用到第三个指针,回到从第一个开始匹配的指针的位置。KMP算法由D.E.Knuth,J.H.Morris和V.R.Pratt三位大神在1977年提出,它的核心算法是利用匹配失败后的信息,减少模式串与主串的匹配次数,以达到快速匹配的目的。如果在接下来遇到的字符串不同,则需要回溯。

weixin_67807492的博客 1341

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

BF算法与KMP算法

BF算法与KMP算法都是用来查找主串中子串的位置,也就是模式匹配。 BF算法的简单粗暴,缺点是每趟匹配不成功时,存在大量回溯,导致程序效率低下,而KMP算法充分利用了成功匹配部分的结果,保证了主串游标不回溯,通过模式串向右滑动代替模式串游标回溯,大大提高了程序运行效率。 简单的了解了一下BF和KMP算法的作用和优缺点后,我们先来看一下具体的代码和细节 先看BF算法(这个算法比较简单,就不多说了直接上代码) #include<iostream> #include<string.h> u

亦话的博客 3642

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java 算法篇-深入了解 BF 与 KMP 算法

KMP 是一种高效的字符串匹配算法,用于在一个主串中查找一个模式串的出现位置。KMP 算法的核心思想是利用已匹配的信息来尽量减少不必要的比较,从而提高匹配效率。KMP 算法的时间复杂度为 O(m+n),其中 m 是主串的长度,n 是模式串的长度。相比于 BF 暴力匹配算法,KMP 算法具有更高的效率,尤其在处理大规模文本匹配时表现优异。简单来说,KMP 算法比 BF 算法有更高的效率,是 BF 一个升级的算法。

小扳手 5642

BF算法,KMP算法

今天我们来学习两种算法,BF算法和KMP算法。相信会让许多小伙伴们打开新世界的大门。

2402_84532723的博客 1661

字符串匹配: BF与KMP算法

详细介绍字符串匹配相关的算法, BF是暴力匹配的算法, 而KMP算法中最重要的是要理解next数组原理和作用, 掌握如何求解next数组.

trong_ 的烂笔头 2802

BF算法及KMP算法的实现

一篇文章带你了解KMP算法

m0_62179366的博客 2786

KMP算法和BF算法

本文采用图解方式展现BF算法与Kmp算法

chengxuyuanlee的博客 2883

【算法】BF、KMP算法及OJ题

【算法】BF、KMP算法以及OJ题目练习

weixin_60478154的博客 1512

BF算法和KMP算法对比

BF算法和KMP算法     子串的定位操作通常被称作串的模式匹配,所谓的模式匹配即从较长的字符串S(主串)的pos位置处开始寻找字符串P(模式串)首次出现的位置,模式匹配算法经典的有BF算法和KMP算法。 1、BF算法     BF算法的思想是从主串的第pos个字符起和模式的第一字符比较,若相等,则继续比较后续字符;若主串与模式串不是完全匹配,则回溯至主串的第pos+1个字符起和模式的

Tsou_Joyce的专栏 1万+
上一篇: 汉诺塔问题(递归)
下一篇: 内存分配
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值