美文网首页
对KMP算法的一些理解

对KMP算法的一些理解

作者: ldclll | 来源:发表于2017-06-08 16:05 被阅读35次

最近学到KMP算法,下面讲讲对KMP算法的一些个人理解,希望对大家有帮助!

对于KMP算法的理解:

整个KMP算法的流程可以这样看,首先对子串的自我匹配程度进行计算,算出的匹配程度分别记录下来称为next数组,然后开始用子串与母串进行匹配,如果一直匹配成功则不需要使用到next数组,当匹配到某一位出现失配时,用当前失配的位置作为下标到next数组中查找,用查找到的数计算出该把整个子串向后移动多少位(当前已匹配的子串长度 - 查找到的next数组对应的值+1),同时用查找到的数作为子串的下标开始匹配。

举个例子

例如有字符串
母串 S=“abceabceabca”
子串 T=“abceabca”

>第一步:计算出子串T的自我匹配程度是next = [0,1,1,1,1,2,3,4]

>第二步:开始匹配
a b c e a b c e a b c a
| | | | | | | \
a b c e a b c a
前面七个均匹配成功,到第八个 子串a-母串e 的时候匹配失败。

>第三步:查找next数组对应的第八位next[7]=4,当前已匹配长度为7,子串的向后移动位数为7-4+1=4,从T[4]开始匹配
a b c e a b c  e  a b c a
               |
        a b c  e  a b c a  ->移动了四位
               ^
           T串的第四位

next数组解决了朴素算法的两个问题

第一,已知子串自我匹配度为0,若子串与母串连续匹配即
S: a b c e a b 
   | | |  
T: a b c

而又可知子串自我匹配度为0,T(a) != T(b) != T(c),所以T(a)不需要与S(b)、S(c)进行多余的匹配。

称为已知不相等的多余匹配
第二,已知子串有一定的自我匹配度,若子串与母串某一位匹配失败即
S: a b c e a b c e a b c a
   | | | | | | | \
T: a b c e a b c a

而又可知子串T(abc1) = T(abc2),也就是有两串相同的字符串”abc”,子串的T(abc2)与母串的S(abc2)相匹配,所以T(abc1) = S(abc2),就不需要进行多余的匹配了。

称为已知相等的多余匹配

个人对于next数组的理解:

可以从两个方面理解next数组
1、记录子串失配后需要的后移位数(当前已匹配的子串长度 - 查找到的next数组对应的值+1)
2、记录子串需要回溯到自身哪个位置的下标

当然,1是为了便于理解以母串作为参考系的图形层面的说法,真正的计算机中并没有移动字符串这一说法,所以2才是next数组的真正意义

总而言之,next数组是记录子串匹配到哪一位出现失配的解决方案,它记录了失配后子串需要回溯到自身的哪一个位置。

以上

相关文章

  • 对KMP算法的一些理解

    最近学到KMP算法,下面讲讲对KMP算法的一些个人理解,希望对大家有帮助! 对于KMP算法的理解: 整个KMP算法...

  • KMP算法 理解与实现

    KMP算法,背景不必多说,主要想写一写自己对KMP算法的一些理解和其具体实现。关于KMP算法的原理,阮一峰老师的这...

  • KMP算法学习札记

    参考文章 知乎:如何更好的理解和掌握 KMP 算法?从头到尾彻底理解KMPKMP 算法(1):如何理解 KMP(原...

  • 深入理解KMP算法

    深入理解KMP算法 时间:20180313 KMP算法的核心是 求公共最大前后缀。 画图分析 继续分析如何利用前后...

  • 数据结构与算法14-字符串匹配与KMP

    什么是KMP KMP算法是在字符串匹配算法中比较绕的.主要是需要理解KMP中next数组求解的必要性以及j 的回溯...

  • 字符串匹配问题-KMP算法

    什么是KMP KMP算法是在字符串匹配算法中比较绕的.主要是需要理解KMP中next数组求解的必要性以及j 的回溯...

  • KMP算法

    参考文献1.B站灯笼哥2.KMP算法python实现3.如何更好的理解和掌握 KMP 算法?

  • KMP 专题整理

    KMP 学习记录 kuangbin专题十六——KMP KMP 学习总结 朴素 KMP 算法 拓展 KMP 算法(E...

  • 理解 KMP 算法

    1. 概述 字符串是编程中常用的一种数据结构,在各个方面都有广泛的应用,而字符串的一种基本操作就是给定一段长度为N...

  • 理解KMP算法

    简单理解KMP 本文读者可以获得两方面的知识 直观理解如何生成部分匹配表(下文简称匹配表),这是KMP算法的核心思...

网友评论

      本文标题:对KMP算法的一些理解

      本文链接:https://www.haomeiwen.com/subject/rittqxtx.html