数据结构中KMP算法是什么

首页 / 常见问题 / 低代码开发 / 数据结构中KMP算法是什么
作者:低代码开发工具 发布时间:10-25 13:58 浏览量:6935
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法是在 BF 算法基础上改进得到的算法。

一、数据结构中KMP算法

KMP算法介绍

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法是在 BF 算法基础上改进得到的算法。学习 BF 算法我们知道,该算法的实现过程就是 “傻瓜式” 地用模式串(假定为子串的串)与主串中的字符一一匹配,匹配不成功则返回到上一次与主串匹配的下一位字符进行匹配,算法执行效率不高。

KMP算法的解决题型

KMP算法是在数据结构中两个字符串相互匹配衍生出来的算法。KMP算法的作用是在一个已知字符串中查找子串的位置,也叫做串的模式匹配。例如,对主串 A(“ABCABCE”)和模式串 B(“ABCE”)进行模式匹配,如果人为去判断,仅需匹配两次。虽然在以上字符较少的串中人为匹配很容易,但是让计算机来匹配就相对慢一些,但是当字符串中的字符非常多的时候,就不可能人为去匹配。所以打铁还需自身硬,我们把这种枯燥的事以一定的算法交给计算机处理。

KMP算法相比BF算法的改进

每当一趟匹配过程中出现字符比较不等时,无需回溯i指针(即无需将i指针完全退回至i-j+1),而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远的一段距离后,继续进行比较。

需要解决的问题:当主串中的第i个字符与模式中第j个字符比较不相等时,主串中第i个字符(i指针不回溯)应与模式中哪个字符再比较?—-假设从主串中第i个字符与模式中的第k个字符再进行比较

它是则呢样来消除回溯的呢?就是因为它提取并运用了加速匹配的信息!

  这种信息就是对于每模式串 t 的每个元素 t j,都存在一个实数 k ,使得模式串 t 开头的 k 个字符(t 0 t 1…t k-1)依次与 t j 前面的 k(t j-k t j-k+1…t j-1,这里名列前茅个字符 t j-k 非常多从 t 1 开始,所以 k < j)个字符相同。如果这样的 k 有多个,则取最大的一个。模式串 t 中每个位置 j 的字符都有这种信息,采用 next 数组表示,即 next[ j ]=MAX{ k }。

延伸阅读:

二、KMP算法的时间复杂度

主要由两部分组成:预处理部分和匹配部分。

  1. 预处理部分:在这一步,算法计算模式串的最长公共前缀和后缀(也称为部分匹配表或失效函数)。这一步的时间复杂度为O(m),因为它遍历了整个模式串。
  2. 匹配部分:在这一步,算法在目标文本中查找模式串。在最坏的情况下,这一步的时间复杂度为O(n)。这是因为算法在进行比较时,可以根据失效函数跳过不匹配的字符,因此,它不需要对每个字符进行逐一比较。

综合考虑这两部分,KMP算法的总时间复杂度为O(m+n)。与朴素的字符串匹配算法相比(其时间复杂度为O(mn)),KMP算法具有更高的效率,尤其在处理大量数据时。

最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

什么是外向潜在客户开发
10-30 10:47
产品开发过程的阶段有哪些
10-30 10:47
开发编程团队介绍怎么写
10-30 10:47
开发团队如何组建
10-30 10:47
众筹筑屋开发费用怎么计算
10-30 10:47
产品开发费用怎么记账
10-30 10:47
开发团队如何协调资源
10-30 10:47
汽车系统开发能力包括哪些
10-30 10:47
app开发费用清单怎么做
10-30 10:47

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科技中一路大族激光科技中心909室
  • 座机:400-185-5850
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2024. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
400-185-5850
申请预约演示
立即与行业专家交流