第四章 KMP算法理论基础

简介: 第四章 KMP算法理论基础

一、什么是KMP

KMP代表三个科学家的名字首字母大写。

三位大神分别是:

  • Knuth
  • Morris
  • Pratt

取了三位学者名字的首字母。所以叫做KMP

1.2为何学KMP?

KMP主要应用在 字符串匹配上。KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。

二、什么是前缀、前缀表

前缀和前缀表是KMP里的重要知识点,在主串和模式串进行匹配的时候,当出现不匹配的时候,模式串应该从哪里重新开始匹配,这就是前缀表的作用

如果没有前缀表,那么就会直接暴力穷举模式串与主串进行匹配。(这种方法效率低,时间复杂度为O(m*n))

2.1先认识一下什么是前缀:

不包含最后一个字符的连续字符串。

2.2认识一下什么是前缀表?

认识前缀表之前需要知道 最长相等前后缀这个概念。因为前缀表就是 模式串的 最长相等前后缀合集

所谓最长相等前后缀就是:蓝色套住的那一坨。[先找出中间字符,两头找对称,能对称的字符为一组,不能的为0]

最长相等前后缀的长度本质就是: 对应前缀表的元素

当模式串出现不匹配的时候,如下图:我们可以查看f上一个元素a的前缀表为 2;那么模式串下一次就从 数组下标为2的模式串的位置开始匹配!

NOTE:

  • next数组和prefix其实就是前缀表

三、重要题型:

匹配问题:

重复子串问题:

目录
相关文章
|
5月前
|
存储 机器学习/深度学习 算法
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty 敏感词
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty 敏感词
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty  敏感词
|
4月前
|
机器学习/深度学习 监控 算法
局域网行为监控软件 C# 多线程数据包捕获算法:基于 KMP 模式匹配的内容分析优化方案探索
本文探讨了一种结合KMP算法的多线程数据包捕获与分析方案,用于局域网行为监控。通过C#实现,该系统可高效检测敏感内容、管理URL访问、分析协议及审计日志。实验表明,相较于传统算法,KMP在处理大规模网络流量时效率显著提升。未来可在算法优化、多模式匹配及机器学习等领域进一步研究。
115 0
|
8月前
|
机器学习/深度学习 存储 算法
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
近端策略优化(PPO)是深度强化学习中高效的策略优化方法,广泛应用于大语言模型的RLHF训练。PPO通过引入策略更新约束机制,平衡了更新幅度,提升了训练稳定性。其核心思想是在优势演员-评论家方法的基础上,采用裁剪和非裁剪项组成的替代目标函数,限制策略比率在[1-ϵ, 1+ϵ]区间内,防止过大的策略更新。本文详细探讨了PPO的基本原理、损失函数设计及PyTorch实现流程,提供了完整的代码示例。
3145 10
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
|
算法
数据结构中的KMP算法及其改进算法
KMP算法通过引入部分匹配表,有效避免了重复计算,从而将字符串匹配的时间复杂度降低到O(m+n)。通过进一步优化next数组,KMP算法的效率得到了进一步提升。对于大规模字符串匹配问题,KMP算法及其改进算法提供了高效的解决方案,是计算机科学领域的经典算法之一。
341 3
|
12月前
|
算法
第七章 回溯算法理论基础
第七章 回溯算法理论基础
98 0
|
算法 C++
A : DS串应用–KMP算法
这篇文章提供了KMP算法的C++实现,包括计算模式串的next数组和在主串中查找模式串位置的函数,用于演示KMP算法的基本应用。
|
12月前
|
算法
KMP算法
KMP算法
119 0
|
数据采集 算法 JavaScript
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
JavaScript字符串搜索涵盖`indexOf`、`includes`及KMP算法。`indexOf`返回子字符串位置,`includes`检查是否包含子字符串。KMP是高效的搜索算法,尤其适合长模式匹配。示例展示了如何在数据采集(如网页爬虫)中使用这些方法,结合代理IP进行安全搜索。代码示例中,搜索百度新闻结果并检测是否含有特定字符串。学习这些技术能提升编程效率和性能。
327 1
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
|
算法
KMP算法
KMP算法
100 0
|
算法 搜索推荐 程序员
第六十三练 字符串匹配 - KMP算法
第六十三练 字符串匹配 - KMP算法
89 2

热门文章

最新文章