首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【算法】----BF算法&KMP算法

BF算法和KMP算法是较为著名的模式匹配算法,接下来作出详细介绍。...BF算法 BF算法(Brute-Force)也称为暴力算法,其核心原理是逐个比较文本串和模式串的字符,如果匹配失败,则通过向右移动模式串的位置,再次进行比较。...代码演示 根据上述过程我们可以写出BF算法的代码: int ViolentMatch(char* s, char* p) { int sLen = strlen(t); int pLen = strlen...时间复杂度 BF算法的时间复杂度取决于文本串T的长度为n,模式串P的长度为m。在最坏情况下,BF算法需要在文本串T的每个位置上都尝试匹配模式串P,因此时间复杂度为O(n*m)。...在实际情况下,BF算法的效率并不高,特别是当文本串T和模式串P的长度很大时。对于较长的文本串和模式串,BF算法的时间复杂度可能会导致性能问题。

17510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    文章目录 前言 BF算法 BF算法的核心 BF代码实现 KMP算法 next数组的引入 KMP代码实现 next数组的优化 相关OJ题 实现 strStr() 前言 大家好,好久不见,这里是平凡的人...---- BF算法 为什么要先来说BF算法❓ BF算法可以说是KMP算法的基础,KMP算法是建立在BF算法之上的。...所以学习BF算法之后能够让我们更快的去理解KMP算法内容,所以我们就先BF算法说起。...什么是BF算法❓ BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符...BF算法是一种蛮力算法。 对于BF算法而言,如果匹配到不相等的,则模式串T要回到第一个字符。而KMP则会通过next数组回退到特定的位置。后面会展开说明。

    61610

    C语言查找-----------BF算法&&KMP算法

    1.问题引入 有一个主字符串,有一个子字符串,要求我们寻找子字符串在主字符串里面开始出现的位置; 2.BF算法 BF算法就是暴力算法,这个做法虽然效率不高,但是按照我们传统的思路依然能够得到结果,接下来我们使用...("abcabdefabchd","abch")); printf("%d\n", BF("abceabcd", "abcd")); printf("%d\n", BF("abcabcabc", "...3.KMP算法 我们想要了解KMP算法,就必须知道他和我们普通的暴力算法有什么不同之处,其实KMP算法是三个大佬发现的,KMP分别是这3个大佬名字的第一个字母(我们了解一下就可以了),他和普通算法的不同点就在于..., (1)我们上面介绍的BF算法,如果匹配错误,i返回i-j+1下标,我们的KMP算法是不会回退的; (2)BF算法的j回退到0下标,这个地方KMP是不会回退到0的,而是回退到一个我们指定的位置,这个回退的指定的位置是...KMP算法的亮点,也是难点,只有真正的了解这个回退的特定位置的计算方法,我们才能掌握KMP算法的精髓,再官方的算法里面,每个主串的元素都会对应一个回退的位置,因此我们把每个元素回退的位置放到数组里面,我们称这样的一个数组叫做

    37110

    算法字符串匹配(查找)-BF算法

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。 字符串是数据结构中比较简单的一种,但又是我们最常用的数据结构之一。...对于字符串对象,最重要的操作之一便是字符串匹配(查找),本篇文章便向大家介绍一个典型的匹配算法—BF算法 为了方便理解,我们直接从问题入手,来理解这两种算法。...BF算法 目标串:BBC ABCDAB ABCD ABCDABDE 模式串:ABCDABD 提示:(空格也是一个字符串) 问题:查看模式串是否出现在目标串中,并找出其在目标串中的下标位置 分析:大家在碰到这个问题时...思考一下,下面讲解BF算法,其实也就是大多人都会想到的方法 思路概况: 将模式串的第一位字符与目标串的第一位字符比较,匹配成功,则将模式串第二位字符与目标串第二位字符比较……若不匹配,则将模式串向右移一位...更多精彩文章: 算法|从阶乘计算看递归算法 算法|字符串匹配(查找)-KMP算法 JavaScript|脚本岂能随意放置 Web|设置隔行变色的单元格 开发|优秀的Java工程师的“对象”一定不错

    1.9K30

    字符串匹配算法(BF & RK)

    BF(Brute Force)暴力匹配 BF算法的思想,在主串中,检查起始位置分别是0、1、2…n-m且长度为m的n-m+1个子串,看有没有跟模式串匹配的。...BF代码 /** * @description: BF暴力匹配 * @author: michael ming * @date: 2019/6/17 20:11 * @modified by:...RK(Rabin-Karp)算法 上面BF算法,每次检查主串与子串是否匹配,需要逐次对比每个字符 引入哈希,降低复杂度 RK算法思路:对n-m+1个子串分别求哈希值,然后与模式串的哈希值比较;如果某个子串的哈希值和模式串的哈希值匹配...(需要考虑哈希冲突),比较数字是否相等是非常快的,所以效率比BF效率高 ?...哈希算法冲突概率要比较低,否则RK算法复杂度退化,效率下降 RK代码 /** * @description:RK匹配算法,计算子串哈希值,进行对比 * @author: michael ming

    57510

    串的模式匹配算法(KMP算法,BF算法+算法详解+实现代码)

    串的模式匹配算法(KMP算法,BF算法+算法详解+实现代码) 子串的定位操作是找子串在主串中从第pos个字符后首次出现的位置,又被称为串的模式匹配 一、BF模式匹配算法 BF算法思想:Brute-Force...BF算法思想: 从主串S的第pos个字符开始的子串与模式串T比较的策略是从前到后依次进行比较。...: BF算法的思想比较简单,但当在最坏情况下,算法的时间复杂度为O(n*m),其中n和m分别是主串和模式串的长度。...KMP算法是模式匹配中的经典算法,和BF算法相比,KMP算法的不同点是消除BF算法中主串S指针回溯的情况,从而完成串的模式匹配,这样的结果使得算法的时间复杂度仅为O(n+m)。...KMP算法仅当模式串与主串之间存在许多“部分匹配”的情况下,才会比BF算法快。

    1K10

    数据结构- 串的模式匹配算法:BF和 KMP算法

    Brute-Force算法的思想 1.BF(Brute-Force)算法 Brute-Force算法的基本思想是: 1) 从目标串s 的第一个字符起和模式串t的第一个字符进行比较,若相等,则继续逐个比较后续字符...Brute-Force算法的实现 c语言实现: // Test.cpp : Defines the entry point for the console application. //...2.1 算法思想: 每当一趟匹配过程中出现字符比较不等时,不需要回溯I指针,而是利用已经的带的“部分匹配”的结果将模式向右滑动尽可能远的一段距离后,继续进行比较。...由此定义可推出下列模式串next函数值: 模式匹配过程: KMP算法的实现: 第一步,先把模式T所有可能的失配点j所对应的next[j]计算出来; 第二步:执行定位函数Index_kmp(...与BF算法模块非常相似) int KMPindex(SString S, SString T, int pos) { if (pos S[0] ) exit(ERROR);

    45210

    主存动态连续分配与回收算法(FF,BF,WF)

    ①首次适应算法(First Fit) FF算法要求空闲分区链以地址递增的次序链接。...下面两个算法类似,写在一起 ②最佳适应算法(Best Fit) 所谓“最佳”是指每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。...③最坏适应算法(Worst Fit) 最坏适应分配算法要扫描整个空闲分区表或链表,总是挑选一个最大的空闲区分割给作业使用,其优点是可使剩下的空闲区不至于太小,产生碎片的几率最小,对中、小作业有利,同时最坏适应分配算法查找效率很高...FF,BF,WF------\n\n"; setMemory(); int flag=1; while(flag){ cout<<"\n-------------...---------\n"; cout<<"选择操作:1:增加进程,2:空间回收"<<endl; cin>>flag; coutBF

    2.1K30

    【CPP】简单的字符串匹配(1)——BF算法与KMP算法

    然后先是我们最容易想到的算法,BF算法——暴风(Brute Force)算法。这是最简单的蛮力匹配算法。简单说就是一个一个位地去匹配字符串。...然而虽然BF匹配很方便易想,但是它的效率很低。时间复杂度是O(n*m)。而它的效率低主要是在当主串中出现很多部分匹配串时算法会不断进行重复无用的匹配。...这里我们想象一下,如果有主串00000000001,模式串00001,这时候如果我们用BF算法来匹配会是怎样的结果?你会发现模式指针和主串指针回溯匹配了很多很多次,但是这些匹配其实是无用的。...于是下面就是KMP算法——一种由Knuth(D.E.Knuth)、Morris(J.H.Morris)和Pratt(V.R.Pratt)三人设计的线性时间字符串匹配算法。...这个算法的时间复杂度还是O(n*m),但是实际使用中执行时间近似于O(n+m),是一个很快很实用的算法。

    1.3K20

    Go 数据结构和算法篇(十一):字符串匹配之 BF 算法

    首先从最简单的字符串匹配算法 —— BF 算法说起,BF 是 Brute Force 的缩写,中文译作暴力匹配算法,也叫朴素匹配算法。...作为最简单、最暴力的字符串匹配算法,BF 算法的思想可以用一句话来概括,那就是,如果主串长度为 n,模式串长度为 m,我们在主串中检查起始位置分别是 0、1、2…n-m 且长度为 m 的 n-m+1 个子串...示例代码 下面我们基于 BF 算法来实现一个 Go 语言版的字符串查找函数: package main import "fmt" // BF 算法实现函数 func bfSearch(s, p string...尽管 BF 算法复杂度看起来很高,但是在日常开发中,如果主串和模式串规模不大的话,该算法依然比较常用,因为足够简单,实现起来容易,不容易出错。...但是对于对时间要求比较敏感,或者需要高频匹配,数据规模较大的情况下,比如编辑器中的匹配功能、敏感词匹配系统等,BF 算法就不适用了,后面我们将介绍更高级的字符串匹配算法来处理这些场景需求。 (本文完)

    59420
    领券