首页 > 编程语言 >数据结构知识总结笔记------第四章:串(2)串的简单模式匹配算法、KMP算法、KMP算法的改进

数据结构知识总结笔记------第四章:串(2)串的简单模式匹配算法、KMP算法、KMP算法的改进

时间:2024-03-16 16:32:25浏览次数:18  
标签:字符 模式 next 算法 KMP ------ 串中

1、简单模式匹配算法

对一个串中某子串的定位操作称为串的模式匹配,其中待定位的子串称为模式串。算法的基本思想:从主串的第一个位置起和模式串的第一个字符开始比较,如果相等,则继续逐一比较后续字符;否则从主串的第二个字符开始,再重新用上一步的方法与模式串中的字符做比较,以此类推,直到比较完模式串中的所有字符。若匹配成功,则返回模式串在主串中的位置;若匹配不成功,则返回一个可区别于主串所有位置的标记,如“0”。
算法实现代码如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、KMP算法

设主串为S1S2…Sn,模式串为p1p2…pm,在上一节的简单模式匹配算法过程中有一个多次出现的关键状态,见表4-2,其中i和j分别为主串和模式串中当前参与比较的两个字符的下标。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

说明:上面1)~7)步骤介绍的求解next数组的方法虽然不是一种高效方法,但是在做选择题时是一种方便的手工求解方法。
讲过了如何手工求next数组的方法,下面介绍一种适用于转换成代码的高效的求next数组的方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、KMP算法的改进

先看一种特殊情况,见表4-7。当j等于5,发生不匹配时,因next[5]=4,则需将j回溯到4进行比较;又因next[4]=3,则应将j回溯到3进行比较……由此可见,j需要依次在5、4、3、2、1的位置上进行比较,而模式串在1到5的位置上的字符完全相等,因此较为聪明的做法应该是在j等于5处发生不匹配时,直接跳过位置1到4的多余比较,这就是KMP算法改进的切入点。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

标签:字符,模式,next,算法,KMP,------,串中
From: https://blog.csdn.net/qq_39311377/article/details/136724065

相关文章

  • 超分辨率(2)--基于EDSR网络实现图像超分辨率重建
    目录一.项目介绍二.项目流程详解2.1.构建网络模型2.2.数据集处理2.3.训练模块2.4.测试模块三.测试网络一.项目介绍EDSR全称EnhancedDeepResidualNetworks,是SRResnet的升级版,其对网络结构进行了优化(去除了BN层),省下来的空间可以用于提升模型的size来增强表现力。......
  • 初出茅庐的小李博客之串口屏开发一个音乐控制器UI
    串口屏介绍串口屏通常指的是一种带有串口接口的显示屏,可以通过串口与其他设备进行通信和控制。这种屏幕通常具有独立的控制器和显示功能,可以直接接入主控系统,实现信息的显示和交互。开发步骤准备UI素材准备了100张音量的图标,这里面还遇到了个小问题,这么多图片如何批量......
  • 【2024年5月备考新增】《软考真题分章练习 - 5 项目进度管理(高项)》
    1、()isatechniqueforestimatingthedurationorcostofanactivityoraprojectusinghistoricaldatafromasimilaractivityorproject.A.AnalogousestimatingB.parametricestimatingC.Three-PointestimatingD.Bottomestimating2、下图中(单位:......
  • <网络安全>《68 微课堂<第9课 常见IT系统集成商简介>》
    1什么是集成商集成商是指那些专门提供系统集成服务的公司,他们通过整合不同的技术、产品和服务,为客户提供一个完整、高效的解决方案。常见的集成商主要包括以下几类:IT系统集成商:这类集成商专注于信息技术领域的集成服务,包括硬件、软件、网络、数据中心等方面的集成。他们......
  • 一个命令查看自己的WIFI密码
    一个命令查看自己的WIFI密码忘记wifi密码怎么办?一个命令查看自己的wifi密码。一、打开命令行使用快捷键“Win+R”,打开运行窗口,输入“cmd”后回车即可。二、输入命令networkshell命令输入命令networkshell,简称netsh;再输入wlan,也就是wifi;最后输入showprofile。......
  • Python疑难杂症(13)---Python的几个比较难理解的内置函数,包括range、zip、map、lambda
    1、range()range(start=0, stop[, step=1])构造器的参数必须为整数(可以是内置的 int 或任何实现了 __index__() 特殊方法的对象)。生成一个start到stop的数组,左闭右开, 类型表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。list(range(6))[0,1,2,3......
  • 嵌入(embedding)概念
    摘要:     嵌入(embedding)在数学和相关领域中是指将一个数学对象在保持其某些关键性质不变的前提下,注入到一个更大或更高维的空间中。这个过程不仅仅是简单的映射,而是要求注入的对象在新空间中的表现形式能够完整反映原有对象的内在结构和性质。    嵌入(embeddi......
  • 指针数组、数组指针、函数指针、指针函数
    数组指针:是指向数组的指针,它还是一个指针,只不过指向数组而已行指针定义形式:int(*p)[10]一定要加(),因为[]优先级高于*,所以必须要(*p)指一行,这里10为列的元素个数例1:二维数组数值为1-12,用行指针定义输出8例2:用行指针传参,2*3数组,输出第二行指针数组:实际是一个数组,长度是......
  • 刷题统计
    题目小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做a道题目,周六和周日每天做b道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于n题?题目描述:小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做a道题目,周六......
  • 顺子日期
    题目本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。小明特别喜欢顺子。顺子指的就是连续的三个数字:123、456等。顺子日期指的就是在日期的yyyymmdd表示法中,存在任意连续的三位数是一个顺子的日期。例如20220123就是一个顺子日期,因为它出现了......