Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >KMP 模式匹配算法

KMP 模式匹配算法

原创
作者头像
用户7737280
修改于 2021-11-10 08:35:19
修改于 2021-11-10 08:35:19
1K0
举报

由三位前辈发表的一个模式匹配算法,可以大大避免重复遍历的情况,称之为克努特-莫里斯-普拉特算法,检查 KMP 算法。

又叫 快速模式匹配算法。

KMP 算法相比于 BF 算法,优势在于:在保证指针 i 不回溯的前提下,当匹配失败时,让模式串向右移动最大的距离;

并且可以在 O(n+m) 的时间数量级上完成对串的模式匹配操作。KMP 算法原理参考链接:CSDN nextval[1] = 0;   int j = 0;

  while (i<strlen(str)) @version v1.0 * @copyright Copyright By lizhuming, All Rights Reserved * @blog http://lx.gongxuanwang.com/sszt/7.htm{     if (j == 0 || str[j-1] == str[i-1])

原理:主串 S 与模式串 T 有部分相同子串时,可以简化朴素匹配算法中的循环流程 湖北遴选从子串最长前缀和最长后缀开始求。最长也少于前面字符个数。最长公共前缀的后面一个字符(指针 j)和匹配失败的那个字符(指针 i)进行对比。于模式串中的某一字符来说,提取它前面的字符串,分别从字符串的两端查看连续相同的字符串的个数,在其基础上 +1 ,结果就是该字符对应的值。

  • 注意:即是不要从可能最长的公共前后缀开始一个减一个地对比下去。如求图中 j+1 的 next 值时,暴力算法就是对比 aabcaabcaaabcaabcaab,如果失败就减少一个长度继续重新对比 aabcaabcabcaabcaab。然后循环下去。

湖北遴选字符对应 next 是第 0 个字符对应 next 数组下标为 1 开始的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
时间复杂度分析案例与方法
对主串的每个字符作为子串开头,与要匹配的字符串进行匹配。对主串做大循环,每个字符开头做要匹配子串的长度的小循环,直到匹配成功或全部遍历完成为止串 S 与模式串 T 有部分相同子串时,可以简化朴素匹配算法中的循环流程。 KMP 中的关键就是求公共最长匹配前缀和后缀的长度。 从子串最长前缀和最长后缀开始求。最长也少于前面字符个数。
用户7737280
2021/11/10
3560
朴素的模式匹配算法
子串(又称模式串)的定位操作通常称做串的模式匹配,是串中最重要的操作之一。朴素的匹配方法(BRUTE FORCE 算法,BF 算法)逻辑思路:
用户7737280
2021/11/10
1K0
PHP数据结构(七) ——串与实现KMP算法
PHP数据结构(七)——串与实现KMP算法 (原创内容,转载请注明来源,谢谢) 一、定义 串是0个或多个字符组成的有限序列,任意连续字符组成的子序列称为子串,与其对应的序列称为主串。子串在主串的第一个位置称为串的位置。当长度相等且每个字符对应相等的两个串,称为其相等。 二、串的表示方式 2.1 定长顺序存储方式 该存储方式类似线性表的顺序存储。有两种存储方式,一种是以下标为0开始的数组存储每个字符,另一种是以“\0”作为结尾。当长度超过定长时,超出部分会被截取。 2.2 堆分配存储表示 和定长的存储方
用户1327360
2018/03/07
1.5K1
PHP数据结构(七) ——串与实现KMP算法
【数据结构】— kmp算法和strstr函数
现实生活中,字符串匹配在很多的应用场景里都有着极其重要的作用,包括生物信息学、信息检索、拼写检查、语言翻译、数据压缩、网络入侵检测等等,至此诞生了很多的算法,那么我们今天就来探索这两种经典的算法。
全栈程序员站长
2022/09/12
6990
【数据结构】— kmp算法和strstr函数
串的模式匹配算法(KMP算法,BF算法+算法详解+实现代码)
子串的定位操作是找子串在主串中从第pos个字符后首次出现的位置,又被称为串的模式匹配
别团等shy哥发育
2023/02/27
9590
串的模式匹配算法(KMP算法,BF算法+算法详解+实现代码)
【数据结构】您有一份KMP算法教学已到账,请注意查收!!!
在上一篇内容中,我们详细介绍了朴素模式匹配算法及其实现。朴素模式匹配算法简单的理解就是将主串中以每一个位序上的元素为开头的子串与模式串进行匹配,直到匹配成功,或者匹配完主串中的所有可能的子串。
蒙奇D索隆
2024/09/07
1160
【数据结构】您有一份KMP算法教学已到账,请注意查收!!!
串的模式匹配之KMP算法
在之前我们介绍过串的朴素模式匹配算法,基本思路就是用主串中的每一个子串和模式串匹配,若匹配失败,都是模式串后移一位再重新开始比较,将模式串序号j置为1。我们假设主串的长度为m,模式串的长度为n,那么在最坏的情况下,主串中每个子串都和模式串进行了匹配,时间复杂度就为O(mn)。
mumumu
2022/12/26
3990
串的模式匹配之KMP算法
字符串匹配算法_字符串模式匹配算法
网络信息中充满大量的字符串,对信息的搜寻至关重要,因此子字符串查找(即字符串匹配)是使用频率非常高的操作:给定一段长度为N的文本和长度为M的模式字符串(N≥M),在文本中找到一个和模式串相匹配的子串。由这个问题可以延伸至统计模式串在文本中出现的次数、找出上下文(和该模式串相符的子字符串周围的文字)等更复杂的问题。
全栈程序员站长
2022/08/02
3K0
字符串匹配算法_字符串模式匹配算法
串的两种模式匹配方式(BF/KMP算法)
串,又称作字符串,它是由0个或者多个字符所组成的有限序列,串同样可以采用顺序存储和链式存储两种方式进行存储,在主串中查找定位子串问题(模式匹配)是串中最重要的操作之一,而不同的算法实现有着不同的效率,我们今天就来对比学习串的两种模式匹配方式:
BWH_Steven
2019/11/06
5990
串的两种模式匹配方式(BF/KMP算法)
一文帮你搞懂 | 串的模式匹配-朴素匹配和KMP算法及优化
 我们看看当我进行完前面的操作后,是否需要继续重i = 2, j = 1开始看起呢
莫浅子
2022/11/18
6690
一文帮你搞懂 | 串的模式匹配-朴素匹配和KMP算法及优化
改进的模式匹配算法—KMP算法
在暴力匹配中,每趟匹配失败都是模式后移一位再从头开始比较。而某趟已匹配相等的字符序列是模式的某个前缀,这种频繁的重复比较相当于模式串在不断地进行自我比较,这就是低效率的根源。
一条晒干的咸鱼
2024/11/19
1890
改进的模式匹配算法—KMP算法
字符串匹配(一) -- 朴素匹配与 KMP 算法
软件算法中,最基础的算法要数排序和查找了,而字符串模式匹配算法可谓是基础中的基础,而最有名又最具代表性的字符串匹配算法要数 KMP 算法了,本文我们就来详细介绍一下 KMP 算法
用户3147702
2022/06/27
1.4K0
字符串匹配(一) -- 朴素匹配与 KMP 算法
KMP模式匹配算法-串的应用
好久不见~各位看客老爷们,距离上次小向上班已经过去了好久--TT,小向也不想,但是被一个地方卡住了好久,最近才弄清楚。那么废话不多说,让我们进入今天的主题叭~数据结构之串及其应用KMP模式匹配算法。
短短的路走走停停
2020/02/14
9230
KMP模式匹配算法-串的应用
KMP算法分析
KMP 算法是一种改进的字符串匹配算法,KMP 算法是由 D.E.Knuth,J.H.Morris 和 V.R.Pratt 三人提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称 KMP 算法)。KMP 算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个 next() 函数实现,函数本身包含了模式串的局部匹配信息。
evenleo
2020/10/14
5460
leetcode 28. 实现 strStr()----KMP算法,朴素模式匹配算法----超万字长文详解
3.KMP算法—这里借鉴宫水三叶大佬的讲解 具体详情可以看原文 KMP 算法是一个快速查找匹配串的算法,它的作用其实就是本题问题:如何快速在「原字符串」中找到「匹配字符串」。 上述的朴素解法,不考虑剪枝的话复杂度是 O(m * n) 的,而 KMP 算法的复杂度为 O(m + n)。 KMP 之所以能够在 O(m + n)O(m+n) 复杂度内完成查找,是因为其能在「非完全匹配」的过程中提取到有效信息进行复用,以减少「重复匹配」的消耗。
大忽悠爱学习
2021/11/15
6530
彻底搞懂KMP算法原理
也就是说,KMP算法是用来解决字符串匹配问题的,从一个主字符串text中寻找一个子字符串(模式字符串)pattern,看这个子串是否在主串中,比如对于text='abaacababcac'和pattern='ababc',子串是包含在主串中的,同时它在主串中的索引是5。
兜兜转转
2023/03/08
6.5K0
彻底搞懂KMP算法原理
【算法】BF、KMP算法及OJ题
什么是BF算法❓ BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。 对于BF算法而言,如果匹配到不相等的,则模式串T要回到第一个字符。而KMP则会通过next数组回退到特定的位置。后面会展开说明。
平凡的人1
2022/11/15
5910
【算法】BF、KMP算法及OJ题
算法:字符串的KMP模式匹配
该文介绍了字符串匹配算法中的KMP算法和字符串匹配的应用场景。
s1mba
2018/01/03
1.8K0
算法:字符串的KMP模式匹配
【字符串匹配算法:BF & KMP】
只要在匹配的过程当中,匹配失败,那么:i回退到刚刚位置的下一个,j回退到0下标重新开始。
每天都要进步呀
2023/03/28
5340
【字符串匹配算法:BF & KMP】
字符串匹配:KMP算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特—莫里斯—普拉特算法。KMP算法主要分为两个步骤:字符串的自我匹配,目
海天一树
2018/04/17
2.5K0
字符串匹配:KMP算法
相关推荐
时间复杂度分析案例与方法
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档