KMP算法小学生理解

KMP算法通过预处理模式串创建查找表,优化字符串匹配,避免朴素算法中的重复运算,降低时间复杂度至O(N+M)。解释包括算法原理、匹配过程及特殊情况处理。
摘要由CSDN通过智能技术生成

KMP算法小学生理解

1.简介

看毛片算法可谓无人不知,相比于朴素字符串匹配,kmp算法将时间复杂度从o(N*M)缩减为o(N+M),实在为一大进步。其中N为模式串的长度,M为要从中寻找字符串的长度。概括的来说,我们首先对模式串进行一些列的打表,然后对M字串遍历就可以了。下面详细地讲一下这个kmp

2.kmp详解

首先,朴素算法之所以可以被优化,其实是因为在匹配的过程中做了重复运算,举个例子来说把,如果M=abcdabcde,N=abcde,如果是朴素匹配算法的话,那么当第一次匹配到e的时候发现与M串不一致于是N串归0,M串的位置+1,接着从b开始匹配,但是你会发现,bcd都不用匹配了,因为他们明显不等于a嘛。这个时候要是可以直接跳到下一个ab开始的地方就好了。这样我们就可以避免那些重复的匹配了。那么该怎么做呢?那就是分析模式串,我们通过模式串的规律来判断我们可以跳几位2,然后打个表,每次匹配到这个位置的时候错误查表,跳转。至于这个表到底怎么来的现在先不用搞清楚,只要先知道每次跳转的大小就等于已经匹配正确的位数-查到最后一个匹配正确的表上的值。实际上我们的这个表记录的是模式串前缀后缀的最大相同长度。仔细想一想的话应该能想懂之前为什么跳转的大小要那样算。如果我们将M匹配到的位置称为count1,N匹配到的位置称为count2,那么count1跳转后,count2清0,接着匹配,但是仔细想想的话这里还是有做重复运算的,因为我都知道前缀后缀有相同了我还回去匹配那些已经知道必定相同的字串干嘛呢,所以我们不妨不要动count1,然后count2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值