KMP算法失配处理

已知字符串s为“abaabaabacacaabaabcc”,模式串T为“abaabc”。采用KMP算法进行匹配,第一次出现“失配”(s[i]≠t[j])时,i=j=5,则下次开始匹配时i和j的值分别是(       )

A.i=1,j=0

B.i=5,j=0

C.i=5,j=2

D.i=6,j=2

解这道题前,首先要了解什么是KMP算法?

  1. KMP算法是三位学者提出来的,全称是克努特D.E.Knuth—莫里斯J.H.Morris—普拉特V.R.Pratt操作,是一种根据BF算法改进的字符串的模式匹配算法。
    1. 模式匹配就是在主串中寻找一个给定的模式,返回主串和模式串匹配的第一个子串的首字符位置。通常主串比较大,而模式串则比较短小。
  2. 所以如果要了解什么是KMP算法,需要先了解什么是BF算法。
    1. BF算法(Brute Force算法)
      1. 也就是我们经常说的暴力算法。
      2. 基本思想:
        1. 就是将主串S的第一个字符与模式串T的第一个字符字符字符进行匹配,
          1. 若相等,则继续比较S的第二个字符和T的第二个字符;
          2. 若不相等,则比较S的第二个字符和T的第一个字符;
          3. 依次比较下去,直到得出最后的匹配结果。
        2. 【换句话就是在模式串中有多个字符和主串中的若干个连续字符比较都相等,但最后一个字符比较不相等时,主串的比较位置需要回退
    2. 而KMP算法在上述情况下,通过一个本身包含了模式串的局部匹配信息的next()函数,利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的,即主串位置不需要回退【或者理解为求得模式的特征向量之后,在每次匹配过程中发生某次失配时,不再单纯地把模式后移一位,而是根据当前字符的特征数来决定模式右移的位数(右移的距离是由模式串T本身决定的,即T的子串t[0...j-1]中的前缀串和后缀串相等的最长长度)】,这样就可以大大提高效率,这就是KMP算法。

回到题目:

已知字符串s为“abaabaabacacaabaabcc”,模式串T为“abaabc”。采用KMP算法进行匹配,第一次出现“失配”(s[i]≠t[j])时,i=j=5,则下次开始匹配时i和j的值分别是(       )

A.i=1,j=0

B.i=5,j=0

C.i=5,j=2

D.i=6,j=2

根据上面讲到的知识:

KMP算法在发生某次失配(s[i]≠t[j])时,i会保持不变,而对于j,

KMP算法由于不再单纯地把模式后移一位,而是根据当前字符的特征数来决定模式右移的位数(右移的距离是由模式串T本身决定的,即T的子串t[0...j-1]中的前缀串和后缀串相等的最长长度),故j会根据上面的方法回退到next的位置并重新比较

本题中讲到字符串s为“abaabaabacacaabaabcc”,模式串T为“abaabc”,

又因为模式串T的子串称为子串t,

第一次失配时i=5,则子串t为“abaab”,

序号0123456

主串s

“abaabaabacacaabaabcc”

abaaba...
【此处模式串T主串s发生失配】

模式串T

“abaabc”

abaabc
子串tabaab

故在这个子串t里面即“abaab”这5个字符中相等且最长的前后缀为“ab”,即“abaab”,

即T的子串t[0...j-1]中的前缀串和后缀串相等的最长长度j=2,代表右移了2位,

故下次开始匹配时i不变为5,j为2,

故选C。


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法---桶排序

原创不易,转载请注明出处。欢迎点赞收藏~ 桶排序(Bucket Sort)是一种排序算法,它将待排序的数据分到几个有序的桶中,每个桶再分别进行排序,最后将各个桶中的数据按照顺序依次取出,即可得到有序序…

【机器学习笔记】 9 集成学习

集成学习方法概述 Bagging 从训练集中进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终的预测结果: 假设一个班级每个人的成绩都不太好,每个人单独做的考卷分数都不高,但每个人都把自己会做的…

在 Android 上部署自定义 YOLOv8 教程

在本教程中,我将向您展示如何在 Android 设备上使用自定义数据集部署 YOLOv8。想要了解如何在 Android 设备上使用您自己的数据集部署 YOLOv8?本文将展示如何操作。 Android 上的 自定义 YOLOv8 🔥 ⚡️ 结果显示标题 对从 GoPro 流式传输到移…

Sora时代,我们的AI应该何去何从?——关于Sora大模型的思考

Sora时代,我们的AI应该何去何从?——关于Sora大模型的思考 一、Sora大模型:横空出世,让AI生成所有领域瑟瑟发抖二、Sora的出现代表了相关行业的灭亡?三、我们将何去何从? 一、Sora大模型:横空出世&#xf…

【机器学习案例7】计算机视觉中的小物体检测:基于补丁的方法

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《机器学习实用指南》本专栏旨在提供 1.机器学习经典案例及源码;2.开源机器学习训练数据集;3.机器学习前沿专业博文。以案例的形式从实用的角度出发,快速上手机器学习项目,在案例中成长…

掌握XGBoost:GPU 加速与性能优化

导言 XGBoost是一种强大的机器学习算法,但在处理大规模数据时,传统的CPU计算可能会变得缓慢。为了提高性能,XGBoost可以利用GPU进行加速。本教程将介绍如何在Python中使用XGBoost进行GPU加速以及性能优化的方法,并提供相应的代码…

1.8 NLP自然语言处理

NLP自然语言处理 更多内容,请关注: github:https://github.com/gotonote/Autopilot-Notes.git 一、简介 seq2seq(Sequence to Sequence)是一种输入不定长序列,产生不定长序列的模型,典型的处理任务是机器翻译&#…

[C# WPF] 如何给控件添加边框(Border)?

在WPF中,可以使用边框控件或者边框属性来为控件添加边框。 以下是两种常见的方法: 方法1:使用边框控件(Border) WPF中的Border控件用于为其他控件添加边框效果。它是一个容器控件,可以包含一个子元素&…

前端常见的设计模式

说到设计模式,大家想到的就是六大原则,23种模式。这么多模式,并非都要记住,但作为前端开发,对于前端出现率高的设计模式还是有必要了解并掌握的,浅浅掌握9种模式后,整理了这份文章。 六大原则&…

Linux第一个小程序-进度条

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、回车和换行 二、行缓冲区概念 三、倒计时 四、进度条代码 版本一: ​编辑 版本二: 总结 前言 世上有两种耀眼的光芒,一…

第七篇【传奇开心果系列】Python微项目技术点案例示例:数据可视化界面图形化经典案例

传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录一、微项目开发背景和项目目标:二、雏形示例代码三、扩展思路介绍四、数据输入示例代码五、数据分析示例代码六、排名统计示例代码七、数据导入导出示例代码八、主题定制示例代码九、数据过…

C语言----结构体

一.结构体是什么? (1)是一种数据类型 首先我们需要知道的是结构体是一种数据类型,它本质上是用于将不同类型的数据组合在一起形成的一个新的数据类型。 (2)是变化的 当不同的类型组合在一起的时候,会产生不同的结构体,例如用c…

reDOS攻击

正则表达式回溯: 当涉及到正则表达式的回溯时,让我们来看一个具体的例子。 考虑以下正则表达式模式 ab,其中 a 表示匹配一个或多个连续的字符 "a",b 表示匹配字符 "b"。 现在,假设有一个输入字…

中医师承出师考试

一.考试内容 1.临床实践技能考核 临床实践技能考核主要涉及基本操作和临床答辩。基本操作包括中医四诊、针灸、推拿、拔罐、常见急症针灸技术应用等中医临床技术。临床答辩则包括中医基本理论知识(含中医经典有关内容)、中药的功效、应用、用法用量、使…

P1914 小书童——凯撒密码

题目背景 某蒟蒻迷上了 “小书童”,有一天登陆时忘记密码了(他没绑定邮箱 or 手机),于是便把问题抛给了神犇你。 题目描述 蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不…

蓝桥杯第十四届电子类单片机组程序设计

目录 前言 蓝桥杯大赛历届真题(点击查看) 一、第十四届比赛题目 1.比赛原题 2.题目解读 1)任务要求 2)注意事项 二、任务实现 1.NE555读取时机的问题 1)缩短计数时间 2)实时读取 2.温度传感器读…

Linux文件操作类命令 find

作用: 实时查询,条件很多,结合shell命令统一处理 格式 find 目录 条件 【shell命令】-name或-iname找具体文件名,-iname(常用)可以忽略大小写 例子find / -iname passwd找根目录下名字正正…

<网络安全>《35 网络攻防专业课<第一课 - 网络攻防准备>》

1 主要内容 认识黑客 认识端口 常见术语与命令 网络攻击流程 VMWare虚拟环境靶机搭建 2 认识黑客 2.1 白帽、灰帽和黑帽黑客 白帽黑客是指有能力破坏电脑安全但不具恶意目的黑客。 灰帽黑客是指对于伦理和法律态度不明的黑客。 黑帽黑客经常用于区别于一般(正面…

问题:在额定电压500V以下的电路中,使用的各种用电设备,一般称为(_ _ _)用电设备 #媒体#媒体#媒体

问题:在额定电压500V以下的电路中,使用的各种用电设备,一般称为(_ _ _)用电设备 参考答案如图所示

RPA岗位介绍 - RPA实施工程师

一、RPA实施工程师 1.1 岗位概述 专业负责RPA机器人流程开发、实施工作的工程师,主要职责是依据客户需求,对RPA机器人流程进行设计、开发和部署实施工作,并最终协助项目经理完成项目的交付验收。 1.2 岗位职责 1.在RPA机器人自动流程化项目实施中,负责了解现有的客户流程,…