字符串的模式匹配(朴素模式匹配算法,KMP算法)

目录

  • 1.朴素模式匹配算法
    • 1.定义
    • 2.算法实现
    • 3.代码实现
  • 2.KMP算法
    • 1.优化思路
    • 2.next数组
    • 3.代码实现
  • 3.求next数组
  • 4.KMP算法优化
    • 1.next数组的优化
    • 2.求nextval数组

1.朴素模式匹配算法

子串:主串的一部分,一定存在。
模式串:不一定能在主串中找到。
字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。

1.定义

假设主串长度为n,模式串长度为m.
朴素模式匹配算法︰将主串中所有长度为m的子串依次与模式串对比,直到找到一个完全匹配的子串,或所有的子串都不匹配为止。(暴力解决:最多对比n-m+1个子串

2.算法实现

①若当前子串匹配失败,则主串指针i指向下一个子串的第一个位置,模式串指针j回到模式串的第一个位置.
②若 j > T . l e n g t h j>T.length j>T.length,则当前子串匹配成功,返回当前子串第一个字符的位置: i − T . l e n g t h i- T.length iT.length(减去模式串的长度)
在这里插入图片描述

3.代码实现

在这里插入图片描述

最坏时间复杂度=O(nm),n为主串长度,m为模式串长度。

2.KMP算法

1.优化思路

①不匹配的字符之前,一定是和模式串一致的。
②利用模式串本身的信息,跳过部分字串的对比。
③对于任何一个模式串,都可以算出某个位置匹配失败时,对应指针j的改变值

例如:
在这里插入图片描述

可以看到优化之后的主串指针i,相较于朴素模式匹配不再回溯

2.next数组

记录每个模式串中的字符匹配失败时,应该修改的模式串指针j的值。

在这里插入图片描述

next数组只和短短的模式串有关,和长长的主串无关。
根据模式串T,求出next 数组。
利用next数组进行匹配(主串指针不回溯)

3.代码实现

在这里插入图片描述

KMP算法,最坏时间复杂度O(m+n)
其中,求next 数组时间复杂度O(m),模式匹配过程最坏时间复杂度O(n)

3.求next数组

next数组的作用:当模式串的第j个字符失配时,从模式串的第next[j]的继续往后匹配。
①任何模式串都一样,第一个字符不匹配时,只能匹配下一个子串,因此,next[1]都无脑写0
②任何模式串都一样,第2个字符不匹配时,应尝试匹配模式串的第1个字符,因此,next[2]都无脑写1
③在不匹配的位置前边,划一根美丽的分界线模式串一步一步往后退,直到分界线之前“能对上”,或模式串完全跨过分界线为止。
在这里插入图片描述

例如:模式串‘google’对应的next数组为:
在这里插入图片描述

4.KMP算法优化

1.next数组的优化

①当模式串使用next数组匹配时,也可能出现第一个字符不相等的情况,必然导致匹配失败。
②当模式串中的失配字符与next数组中对应的字符相等时,可以进行优化。

例如:模式串T=‘abaabc’
在这里插入图片描述

2.求nextval数组

先求next数组,再由next数组求nextval数组。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/131659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于超宽带技术的人员定位系统源码,spring boot+ vue+ mysql定位系统源码

​UWB定位技术源码 超宽带技术的人员定位系统源码 UWB人员定位系统是一种基于超宽带技术的人员定位系统,它通过发送和接收超短脉冲信号,在测距方面可以达到微米级精度。这种系统通常需要具备高精度的定位能力,通常需要达到微米级别&#xff0…

11个最受欢迎的3D打印AI软件【2023】

如今,人工智能(AI)似乎已经成为每个人都在谈论的话题。 尽管围绕该技术的伦理问题存在着重要的讨论,但不可否认的是,人工智能可能成为包括 3D 打印在内的许多不同行业的重要工具。 事实上,人工智能在 3D 打…

C 语言 switch 语句

C 语言 switch 语句 在本教程中,您将通过一个示例学习在C语言编程中创建switch语句。 switch语句使我们可以执行许多代替方案中的一个代码块。 虽然您可以使用if…else…if阶梯执行相同的操作。但是,switch语句的语法更容易读写。 switch … case的语…

2014年计网408

第一题 在 OSI 参考模型中, 直接为会话层提供服务的是()A. 应用层B. 表示层C. 传输层D. 网络层 运输层是会话层的相邻下层,它为会话层直接提供服务。运输层也称为传输层。 第二题 某以太网拓扑及交换机当前转发表如下图所示, 主机 00-e1-d5-00-23-a1 向主机 00−…

【MATLAB源码-第76期】基于模拟退火算法(SA)的无人机三维地图路径规划,输出最短路径和适应度曲线

操作环境: MATLAB 2022a 1、算法描述 模拟退火算法是一种启发式优化算法,通常用于解决组合优化问题,例如旅行商问题和图着色问题。它模拟了固体材料在退火过程中逐渐冷却达到稳定状态的行为,以寻找问题的全局最优解。 以下是模…

在IDEA中使用maven项目总结

一 什么是maven Maven本身也是Java写的,他是一款服务于Java平台的自动化构建工具 Maven是一个项目管理工具,旨在简化软件项目的构建、依赖管理和项目信息管理。它使用基于项目对象模型(Project Object Model,POM)的…

【算法与设计模式】

一、数据结构与算法 1、算法性能评估 时间复杂度、空间复杂度 2、数据结构 数组与列表 队列 堆栈 链表 二叉树 多叉树 递归算法 二、设计模式 1、单例 (1)GIL:线程互斥锁。保证同一时刻只有一个线程在进行。 (2&#xff09…

初学前端CSS教案(理论+代码+效果图)

文章目录: 一:前言 1.什么是CSS呢? 2.环境 3.HTML5相关 4.瞅瞅CSS代码样式什么样? 二:编码规范 1.声明 2.注释 3.选择器 3.1 块元素选择器{} 3.2 id选择器 " # " 3.3 class选择器 " . &quo…

【算法-哈希表1】哈希表有什么用? 来看看 有效的字母异位词 和 两数组的交集.

今天,带来哈希相关算法的讲解。文中不足错漏之处望请斧正! 理论基础点这里 有效的字母异位词 1. 思路 暴力的解法,需要两层for循环,同时还要记录字符是否重复出现,很明显时间复杂度是 O(n^2)。 其实可以用哈希表来…

【物联网】继续深入探索ADC模拟转数字的原理——Flash ADC流水线ADC逐次逼近型SAR ADC

这篇文章主要弥补上一篇关于ADC的不足,更加深入了解ADC数模转换器的工作原理,举例常见的三种ADC,分别为Flash ADC&流水线ADC&逐次逼近型SAR ADC。 【物联网】深入了解AD/DA转换技术:模数转换和数模转换 文章目录 一、模拟…

765. 情侣牵手(困难)

首先不考虑已经正确坐在一起的组合在没有坐在一起的组合中,只有当两对情侣互相配对时只需要一次交换操作就可以使得两对情侣完成匹配,其余情况交换数等于情侣对数可以把所有情侣看成一个大集合,这个大集合是可以拆成若干小集合的,…

超全总结!探索性数据分析 (EDA)方法汇总!

探索性数据分析(EDA)是一种系统地分析、可视化和总结数据集的过程,以获取洞察并更好地理解数据中潜在的模式和趋势。 EDA是任何数据分析项目中的重要步骤,因为它有助于识别数据中的潜在问题和偏见。EDA有助于为建模和进一步分析奠…

08 # 手写 filter 方法

什么是 filter filter() 方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。如果没有元素通过测试,则返回一个空数组。 ele:表示数组中的每一个元素index:表示数据中元素的索引array:表示数…

.NET快速对接极光消息推送

什么是消息推送? 很多手机APP会不定时的给用户推送消息,例如一些新闻APP会给用户推送用户可能感兴趣的新闻,或者APP有更新了,会给用户推送是否选择更新的消息等等,这就是所谓的“消息推送”。 常见的一些APP消息推送…

lv11 嵌入式开发 ARM体系结构理论基础(异常、微架构)4

1 异常概念 处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生 这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件 异常事件处理完成之后再返回到被异常打断的点继续执行程序 2 异常处理机制 不同的处理器对异常的处理的流程大体相似&#xff0c…

CMakeCache.txt有什么用

2023年11月11日,周六上午 CMakeCache.txt 是由 CMake 自动生成的一个缓存文件,用于记录在配置过程中生成的各种变量和选项的值。 在使用 CMake 构建项目时,CMake 会根据 CMakeLists.txt 文件中的配置和命令,解析项目的源代码并生…

机器学习算法——线性回归与非线性回归

目录 1. 梯度下降法1.1 一元线性回归1.2 多元线性回归1.3 标准方程法1.4 梯度下降法与标准方程法的优缺点 2. 相关系数与决定系数 1. 梯度下降法 1.1 一元线性回归 定义一元线性方程 y ω x b y\omega xb yωxb 则误差(残差)平方和 C ( ω , b ) …

新生儿夜惊:原因、科普和注意事项

引言: 新生儿夜惊是一种常见的现象,它可能让新父母感到焦虑和不安。夜惊通常表现为婴儿在夜间忽然惊醒、哭闹,并伴随着呼吸急促和肌肉紧张。尽管这在大多数情况下是正常的生理现象,但对于父母来说,了解夜惊的原因和适…

MES系统如何赋能制造企业实现4M防错追溯?

生产过程4M管理和MES系统的结合是现代制造业中关键的质量管理实践,它有助于提高生产效率、降低生产成本并保证产品质量。本文将深入探讨4M管理的概念,以及MES系统如何赋能制造企业实现4M防错追溯。 一、4M管理的概念 4M管理是指在制造过程中管理和控制四…

蓝桥杯算法心得——拼数(排列型回溯dfs)

大家好,我是晴天学长,排列型的dfs,在一些需要暴搜的题中很中很重要,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .拼数 2) .算法思路 超级递归 1.遍历数组&#…
最新文章