20251110 - KMP

news/2025/11/10 20:31:10/文章来源:https://www.cnblogs.com/myblog-Ruochen/p/19208160

前言

我今天生日!!!

由来

KMP 算法,是由 Knuth、Pratt 和 Morris 三位巨佬发布的一个算法。

他可以在线性(说人话就是 \(O(n + m)\) )时间复杂度内在字符串中查找子串

思想

朴素算法:

枚举每一个元素,然后从这一位开始不断向后比较,每次比较失败之后都要从上一次匹配的位置的下一个位置开始重新比对,最好时间复杂度是 \(O(n+m)\) 的,但是如果子串比较靠后或者匹配失败比较多,最坏可以卡到 \(O(nm)\) 的。

字符串哈希

朴素算法的慢,是因为判定子串和截取的原串的时间复杂度是 \(O(m)\) 的,有不有什么方法可以使判断子串的时间复杂度变成 \(O(1)\) 呢?

我知道,字符串哈希。

预处理出哈希表,之后再查一查就好了。

时间复杂度\(O(n+m)\)

正确率\(\ge 95\%\)。(话说 dzl 十哈希被卡了?)

KMP

如果能让指针 \(i\) 不后退,就能让时间复杂度优化成 \(O(n + m)\)

字串:abcab
原串:abcacababcab

首先看看 \(a[i+1]\) 是否等于 \(b[j + 1]\),如果是,\(i\)\(j\) 都加 \(1\)

否则找到一个 \(k\),使得 \(b[1] \sim b[k] = a[i - k + 1] \sim b[n]\),跳回 \(k+1\) 这个位置。

依次匹配下去。

next 数组

KMP 的精髓在 \(next\) 数组上。

\(a[i] == a[j + 1] \ (1 \le i \le n,0 \le j \le n)\) 时,\(i\)\(j\) 都加 \(1\)

否则查一查 \(next\) 数组,考虑更小的区间,反复跳回直到可以再次进行操作的位置,这就是 \(next\) 数组的处理法。

历史背景

KMP 算法由 Donald Knuth、James H. Morris和Vaughan Pratt 三位巨佬于 \(1977\) 年联合发明。该算法的名称来源于这三位科学家的姓氏首字母。KMP 算法的发明背景源于当时计算机资源稀缺,特别是在进行大文本字符查找时,响应时间过长,无法充分利用计算资源。

例题

1.[【模板】KMP](P3375 【模板】KMP - 洛谷)

模版题,代码如下:

void init_next(){int j = 0;nxt[1] = 0;for(int i = 2;i <= n;i++){while(j > 0 && b[i] != b[j + 1]){j = nxt[j];}if(b[i] == b[j + 1]) j++;nxt[i] = j;}
}
void solve(){init_next();int i = 0,j = 0;for(;i <= n;i++){while(j > 0 && a[i] != b[j + 1]){j = nxt[j];}if(a[i] == b[j + 1]){j++;}if(j == m){printf("%d\n",i - m + 1);j = nxt[j];}}for(int i = 1;i <= n;i++)printf("%d ",nxt[i]);
}

2.[[BalticOI 2009] Radio Transmission 无线传输]([P4391 BalticOI 2009] Radio Transmission 无线传输 - 洛谷)

思路:求出字符串的 \(next\),用 \(n - next[n]\)

证明:从字符串的某一处开始到串末,和串首到某一处是完全相等的,其中最长的就是最长公共前后缀。

所以,答案就为 \(n - next[n]\)

代码:

void solve(){printf("%d\n",n - next[n]);
}

后记

KMP 难在 \(next\) 数组上,考点也在 \(next\) 数组上,所以,还是好好学习 KMP 吧!(用 find 函数

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

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

相关文章

个人服务器无法连接外网的设置问题(LINUX,NMCLI)

个人服务器无法连接外网的设置问题(LINUX,NMCLI)本文为和AI大模型KIMI的对话记录,仅供参考。 解决问题,个人迷你主机设置静态地址后,局域网内其他电脑能连接,但是服务器却无法上网,经过查实是网关设置的问题。…

2025年11月智能洗碗机型号推荐榜:麦浪5000plus+领衔全维度对比

把碗留给机器,把时间留给自己,正在成为30-49岁一二线城市品质家庭的共识。白天在写字楼里开完线上会议,晚上回家面对水槽里堆叠的锅碗,很多人第一反应不是“洗”,而是“能不能不洗”。这种“时间焦虑+健康顾虑”的…

CF1485F Copy or Prefix Sum 分析

题目概述 给定一个整数数组 \(b_1, b_2, \ldots, b_n\)。 如果一个整数数组 \(a_1, a_2, \ldots, a_n\) 满足对于每个 \(i\)(\(1 \leq i \leq n\)),至少满足以下两个条件之一:\(b_i = a_i\),或者 \(b_i = \sum_{j…

在电脑上操作手机,并把手机黑屏 - 昵

在电脑上看手机,同时让手机屏幕保持黑屏?完美方案在这里! 你是否也有过这样的需求?想在电脑上专心处理手机上的文档或消息,但手机的亮屏总是分散注意力。 想长时间在电脑上操作手机,又担心手机屏幕亮着耗电发热。…

2025年11月小户型油烟机型号推荐榜:五款热销机型全维度对比

把油烟机装进不足4平米的厨房,很多用户第一次发现“尺寸”比“风量”更棘手:吊柜底下露一截,炒菜时额头磕面板;风量开大,公共烟道又倒灌;拆洗一次,半瓶清洁剂下去油垢还在叶轮里。2025年住建部《住宅厨房净烟设…

教务管理系统开发博客

教务管理系统(面向对象设计)开发博客 目录一、选题与前期调查 二、系统功能设计一、选题与前期调查 想要做什么 本次开发的教务管理系统将采用面向对象设计思想,核心聚焦于「学生-班级-课程-教师-成绩」的关联管理。…

2025年11月智能油烟机型号推荐对比:五强机型性能参数全解析榜

进入2025年下半年,全国住宅竣工面积连续四个月环比回升,厨房换新需求集中释放。中国家用电器协会公开数据显示,2025年1-9月油烟机线上零售额同比增长18.7%,其中“智能风随烟动”“免拆洗”两大功能检索量占比高达6…

2025年11月大容量洗碗机型号推荐榜:市场主流机型横向对比解析

把周末留给家人而非水槽,是不少双职工与三代同堂家庭的共同心愿。中国家电协会2025年三季度报告显示,洗碗机内销额同比增百分之三十七点二,其中可容纳十六套及以上餐具的大容量段占比首次过半,成为增长主引擎。政策…

2025年11月大容量洗碗机型号评价榜:家庭聚会场景下的优选排行

2025年11月,当“谁洗碗”成为家庭聚会的最后一道难题,越来越多用户把“大容量洗碗机”列入双11后的必买清单。中国家用电器研究院《2025洗碗机行业白皮书》显示,13套以上机型销量同比增42%,其中20套段增速最快,主…

2025年11月除菌洗碗机型号对比榜:权威数据看懂五星机型差异

进入11月,北方集中供暖启动、南方湿度骤降,餐具在封闭空间内更易滋生细菌,不少家庭把“换一台真正能除菌的洗碗机”提上日程。小红书“除菌洗碗机”关键词近30天搜索量环比上升42%,京东后台咨询里“能不能灭幽门杆…

2025年11月除菌洗碗机型号推荐榜:五款高除菌率机型对比评价

进入11月,北方集中供暖启动,南方也进入湿冷模式,餐具久晾不干、橱柜返潮长霉成为家庭厨房的新痛点。越来越多用户把“除菌”列为选购洗碗机的首要指标:母婴家庭担心奶瓶死角残留病菌,三代同堂害怕幽门螺旋杆菌交叉…

如何确保安全的就是​HTTPS

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Paytium 3.0.13 WordPress插件存储型XSS漏洞分析

本文详细分析了Paytium 3.0.13 WordPress插件中存在的存储型XSS漏洞,展示了如何通过恶意注入HTML和JavaScript代码,最终实现WordPress网站完全控制的过程,并提供了相应的解决方案。Paytium 3.0.13 WordPress插件中的…

使用爬虫技术抓取网站数据的方法和工具

使用爬虫技术抓取网站数据的方法和工具 网络爬虫是一种自动化程序,用于访问和提取网站上的数据3。它可以从任何网站获取特定的或更新的数据并将其存储下来,极大地简化了手动收集数据的过程**

Spring Cloud Alibaba + SkyWalking

SkyWalking 在微服务世界里,每个服务就像一个繁忙的小摊位,服务之间的调用就像小伙伴之间传纸条。想要知道哪个摊位慢了、哪个小伙伴忙得不可开交,你就需要 SkyWalking——微服务界的“侦探大队长”,帮你全方位监控…

改题

总结10.11 B10.1110.14 C10.11 B

20232419 2025-2026-1 《网络与系统攻防技术》实验四实验报告

1.实验内容 1.1恶意代码文件类型标识、脱壳与字符串提取 1.2使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息。 1.3分析一个自制恶意代码样本rada,并撰写报告,回答以下问…

svn提交显示is out of date

在修改一个html文件要提交的时候,显示失败,xxx is out of date 用最原始的方法:先把出问题的这个代码做个备份 然后将这个文件revert revert之后我再update一下,再把备份内容覆盖进去原文地址:https://www.cnblogs…

MacX DVD Ripper Pro for Mac v6.8.2 安装教程|MacDVD转换软件怎么安装?

MacX DVD Ripper Pro for Mac v6.8.2 安装教程|MacDVD转换软件怎么安装?​ MacX DVD Ripper Pro 是一款专为 Mac 电脑设计的 DVD 拷贝/转换工具,这款软件可以帮你轻松将 DVD 光盘里的影片转换成 MP4、MOV、AVI 等常…

日志 | 2025.11

总结10.11 B10.1110.14 C10.11 B