我都能理解的KMP算法,你一定也可以!

news2024/10/9 18:23:43

KMP算法简介

用于字符串匹配,其作用是在一个主字符串中查找一个模式字符串的出现位置

主串:也叫文本串,就是原始的整个字符串
模式串:需要匹配的子串
前缀:以第一个开头,不含最后一个字符的连续子串
后缀:以最后一个结尾,不含第一个字符的连续子串
最长相同前后缀:字符串的所有前缀和后缀中,最长的相同的字符串

KMP算法的基本步骤:

  1. 建立前缀表:通过分析模式字符串的前缀和后缀,建立一个表,指示在匹配失败时,应该跳到模式字符串的哪个位置进行下一次比较。
  2. 匹配过程:遍历主字符串,使用前缀表来决定如何跳转,从而减少比较次数。

为什么需要最长相同前后缀的长度呢?

前缀表的基本原理是利用模式字符串的自身信息来避免不必要的字符比较。

举个例子:有模式串abac,当我们遍历到各个位置时,前后缀的枚举如下
a: 没有前后缀,所以最长相同前后缀的长度是0
ab: 前缀a后缀b,长度是0
aba: 前缀a、ab,后缀ba、a,长度是1
abac: 前缀a、ab、aba,后缀bac、ac、c,长度0

所以该模式串对应的前缀表数组为:[0, 0, 1, 0]

在匹配到第四个字符(下标3)失败的情况下,
其实可以得知前面的匹配是成功的,主串是这样的...aba*...
根据前缀表获得aba对应的值为1,把模式串的下标移动到1,从b开始和*比较即可,不需要从模式串第一个字符开始比较。

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

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

相关文章

24下软考中级系统集成项目管理工程师怎么备考?

备考资料: 1.教材 教材可以准备由清华大学出版社出版的系统集成项目管理工程师教材,这也是官方所推荐的教材,准备这本书是绝对没错的。 2.真题 真题也是在备考过程中少不了的资料之一,而且系统集成项目管理工程师考试就是需要多…

初始项目托管到gitee教程,开箱即用

0.本地仓库与远程仓库关联(需先在gitee创建仓库) ①打开powershell生成ssh key ssh-keygen -t ed25519 -C "Gitee SSH Key"-t key 类型-C 注释 生成成功如下,并按下三次回车 ②查看公私钥文件 ls ~/.ssh/输出: id_…

华为---Super VLAN简介及示例配置

目录 1. Super VLAN技术产生背景 2. Super VLAN概念 3. Super VLAN应用场景 4. Super VLAN工作原理 5. Super-VLAN主要配置命令 6. Super-VLAN主要配置步骤 7. 示例配置 7.1 示例场景 7.2 网络拓扑 7.3 配置代码 7.4 代码解析 7.5 测试验证 1. Super VLAN技术产生背…

虹软人脸 报错 Can‘t find dependent libraries

系列文章目录 文章目录 系列文章目录一、虹软人脸 报错 Can‘t find dependent libraries 一、虹软人脸 报错 Can‘t find dependent libraries 在项目中使用了 虹软 人脸识别SDK,环境一直出错。 错误: Can’t find dependent libraries 从错误信息来…

项目启动 | 盘古信息赋能奥尼视讯数字化转型升级,实现全面数智化发展

随着信息技术的飞速发展与全球市场竞争的日益激烈,传统制造业正面临生存和发展的危机,制造企业为谋求发展,纷纷开启数字化转型之路,深度融入数字技术,实现生产流程的智能化、管理模式的精细化以及产品服务的个性化&…

[面试] java开发面经-1

前言 目录 1.看到你的简历里说使用Redis缓存高频数据,说一下Redis的操作 2.说一下Redis的缓存击穿、缓存穿透、缓存雪崩 3.你的项目中使用了ThreadLocal,那么当有两个请求同时发出时,会怎么处理,可以同时处理两个请求吗 4.使用…

CUDA、Pytorch、Pycharm的安装与配置

文章目录 一、CUDA安装1.检查英伟达驱动支持的最高CUDA版本 二、Pytorch的安装与环境配置1.选择是下载CPU版本还是GPU版本2.上Pytorch官网找到安装命令3.运行指令(1)CPU版本(2)GPU版本 4.验证5.安装其他所需模块(0)安装torch(1)安装Matplotlib(2)安装 pillow(可能an…

高效稳压,YB2411 DCDC降压芯片助力高电压功率转换系统

在现代的科技发展中,高电压功率转换系统的需求越来越多。为满足市场需求,我们推出了一款高输入电压DCDC降压芯片——YB2411。 YB2411系列 1>昱灿 YB2411R SOT23-6 DC-DC高压降压 36V 0.6A 2>昱灿 YB2411SR SOT23-6 DC-DC高压降压 60V 0.8A YB241…

【simulink仿真模型】Buck变换器闭环控制,电力电子仿真模型

摘要 本文介绍了基于Simulink的Buck变换器闭环控制系统的设计与仿真。通过对Buck变换器的数学模型进行建模,并引入PI控制器对输出电压进行实时调节,实现了系统的稳态控制。仿真结果显示,该闭环控制系统能够快速响应负载变化,保持…

头戴式耳机性价比推荐有哪些?头戴式耳机性价比之王推荐

这不是马上就要双十一了?对于环境比较吵的人来说,趁着最近双11开始,是购买耳机的好时机。即将入冬,佩戴头戴式耳机频率越来越多,包裹着耳朵很舒适保暖。有的人入耳式已经非常多了,而且同样的价格&#xff0…

地图箭头方向检测系统源码分享

地图箭头方向检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

哈佛大学俩学生开发出一种 AI 眼镜,看你一眼就能扒光所有个人信息

最近,科幻场景中的一个设想变成了现实:一副眼镜能够一瞥便获取人的全部信息! 两位来自哈佛大学的学生开发了一个名为I-XRAY的项目,该项目利用智能眼镜结合面部识别技术,能够实时分析并获取被捕捉者的个人信息。这些信…

ChatTTS使用demo示例(包含长文本生成语音、固定音色pt文件)

ChatTTS使用demo示例(包含长文本生成语音、固定音色pt文件) 一、配置开发环境 安装anaconda,安装参考文章:https://blog.csdn.net/Q_fairy/article/details/129158178 建议anaconda最新版:https://mirrors.tuna.tsi…

windows11下面使用Pyinstaller打包python程序

文章目录 一、安装Python二、安装pip三、通过pip安装pyinstaller四、使用pyinstaller打包python为二进制程序参考 一、安装Python 我这里直接下载的是Python的可执行程序包,打开即用的版本, 也可以按照以下的教程安装python工具到windows上面 &#…

海洋鱼类图像分类分割系统源码&数据集分享

海洋鱼类图像分类分割系统源码&数据集分享 [yolov8-seg-slimneck&yolov8-seg-attention等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Globa…

MySQL联合索引、索引下推Demo

1.联合索引 测试SQL语句如下:表test中共有4个字段(id, a, b, c),id为主键 drop table test;#建表 create table test(id bigint primary key auto_increment,a int,b int,c int )#表中插入数据 insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,…

数据分析Power BI设置万为单位的数据

玩过Power BI的同学都知道,power BI在度量值设置单位里,唯独没有万这个单位,但是我们可以自定义,操作过程如下: 1.用DAX新建单位表 单位 SELECTCOLUMNS( { ( "元", 1), ("万",10000), ("千…

清华大学经管学院朱武祥教授:五步构建高效的数据飞轮,提升企业核心竞争力

面对AI时代的到来,企业应积极拥抱这一变革,构建和优化自身的数据飞轮,让飞轮高速转动起来,为企业的创新发展持续赋能。 近期,清华管理评论发表了一篇名为《AI时代如何构建数据飞轮》的文章,引起了我们的重点…

Java 根据字符生成背景透明的图片

上代码 package com.example.demotest.controller;/*** Author shaolin* Date 2024-10-08 10:11**/import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; impor…

手机 电脑 Pad 是如何得到IP地址的呢? 如何让你的设备自动获取IP地址?DHCP :给你 IP 地址的隐形人

我们每天都是用手机 电脑 Pad 一系列电子设备连接到网络中,然后网络中的每一个设备都有一个独一无二的IP地址,用来作为网络中的唯一标识,那这些设备上的IP地址是如何得到的呢? 在现代网络中,每一台设备都需要一个唯一的…