KMP算法

简介: 算法系列

KMP算法

KMP算法是有三位计算机科学家 D.E.Knuth、J.H.Morris、V.R.Pratt提出,取自三人姓氏首字母。

KMP算法是String Search算法,之前搜索String,可以用BF,或者BM。

BF

暴力算法,对主串和模式串进行逐个比较。第一轮时,先对第一个字符进行比较,如果不合适就将模式串右移一位,然后继续比较;依次类推,直到合适匹配或者不符合为止。这样比较由于每次都要重头比较,效率太低。

BM

模式串的比较是从右到左,模式串的移动是从左到右,借用坏字符规则和好后缀规则,在每一轮比较时,可以让模式串尽可能的多移动几位。

KMP算法

和BM很相似,也是为了让模式串在每一轮多移动几位。

首先先明白字符串的前缀和后缀。比如一个string,{ababac},前缀集合就是{a,ab,aba,abab,ababa},后缀集合就是{babac,abac,bac,ca,a},那么交集就是{a},就是公共子串。

假设主串{ABABABAC},模式串{ABABAC},那么先找到公共子串{ABA},在主串和模式串中可以分别称为最长可匹配后缀子串和最长可匹配前缀子串

在这里插入图片描述

当C与B不匹配的时候,就根据获得的公共子串的长度,进行移动,找模式串中的长度+1位置的元素,和主串进行比较。比如例子中是3,就右移至和最长可匹配后缀子串相匹配,找第四位与主串相对的位置比较。

在这里插入图片描述

由此可以生成next数组,来缓存记录找到的最长可匹配后缀子串和最长可匹配前缀子串。

在这里插入图片描述

有些地方的index开始位置不一样,这里借鉴b站视频,网上有很多写KPM的文章,读了很多后还是阮一峰大神的比较清楚。

相关文章
|
7月前
|
存储 机器学习/深度学习 算法
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty 敏感词
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty 敏感词
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty  敏感词
|
6月前
|
机器学习/深度学习 监控 算法
局域网行为监控软件 C# 多线程数据包捕获算法:基于 KMP 模式匹配的内容分析优化方案探索
本文探讨了一种结合KMP算法的多线程数据包捕获与分析方案,用于局域网行为监控。通过C#实现,该系统可高效检测敏感内容、管理URL访问、分析协议及审计日志。实验表明,相较于传统算法,KMP在处理大规模网络流量时效率显著提升。未来可在算法优化、多模式匹配及机器学习等领域进一步研究。
199 0
|
算法 C++
A : DS串应用–KMP算法
这篇文章提供了KMP算法的C++实现,包括计算模式串的next数组和在主串中查找模式串位置的函数,用于演示KMP算法的基本应用。
|
数据采集 算法 JavaScript
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
JavaScript字符串搜索涵盖`indexOf`、`includes`及KMP算法。`indexOf`返回子字符串位置,`includes`检查是否包含子字符串。KMP是高效的搜索算法,尤其适合长模式匹配。示例展示了如何在数据采集(如网页爬虫)中使用这些方法,结合代理IP进行安全搜索。代码示例中,搜索百度新闻结果并检测是否含有特定字符串。学习这些技术能提升编程效率和性能。
396 1
揭开JavaScript字符串搜索的秘密:indexOf、includes与KMP算法
|
算法
第四章 KMP算法理论基础
第四章 KMP算法理论基础
288 0
|
算法
KMP算法
KMP算法
179 0
|
算法
KMP算法
KMP算法
139 0
|
算法 Java
KMP算法详解及其在字符串匹配中的应用
KMP算法详解及其在字符串匹配中的应用
|
人工智能 算法 BI
一篇文章讲明白KMP算法(俗称看毛片算法)
一篇文章讲明白KMP算法(俗称看毛片算法)
304 0
|
算法 Java
Java数据结构与算法:字符串匹配算法之KMP算法
Java数据结构与算法:字符串匹配算法之KMP算法

热门文章

最新文章