美文网首页
KMP 算法中 next 数组手工求解

KMP 算法中 next 数组手工求解

作者: FlintyLemming | 来源:发表于2019-02-19 17:23 被阅读0次

KMP算法是一种改进的字符串匹配算法,如果不研究编码的话,手工实现还是比较简单,小型字符串甚至不需要你去求 next 数组就能看出来怎么移动。但是会有一些题目让你求解 next 数组,这里就以一个题目讲一下手工求解的过程。

例:求串 ‘ababaaababaa’ 的 next 数组

观察第一个元素,它没有前缀和后缀(串本身不能作为前缀或后缀),所以记录数据为0(这个数字表示当存在前缀和后缀相同的情况下,所能包含的最大的元素)

观察前两个元素,前缀为a,后缀为b,不相同,即没有相同的前缀和后缀,所以同样记录数据为0

观察前三个元素,存在前后缀相同的情况,为a,记录数据为1

观察前四个元素,同样存在前缀后缀相同的情况,为ab,记录数据为2

观察第五个元素,相同的前后缀为aba(ababa、ababa),记录数据为3

同理观察余下的(用加粗表示前缀、下划线表示后缀)

ababa_a_ 1

ababaa_a_ 1

ababaa_ab_ 2

ababaa_aba_ 3

ababaa_abab_ 4

ababaa_ababa_ 5

ababaaababaa 6

最后我们得到一组数值:0 0 1 2 3 1 1 2 3 4 5 6

在这组数开头添加 -1,并删去最后一个数值,数组变为: -1 0 0 1 2 3 1 1 2 3 1 1 2 3 4 5

所有值+1,变为:0 1 1 2 3 4 2 2 3 4 2 2 3 4 5 6,这就是我们需要的 next 数组

需要注意的是,不同的题目next[0]可能为-1,所以 -1 0 0 1 2 3 1 1 2 3 1 1 2 3 4 5 同样有可能作为 next 数组,但是这两种一定不会同时出现。

题目图片:

image

相关文章

  • KMP 算法中 next 数组手工求解

    KMP算法是一种改进的字符串匹配算法,如果不研究编码的话,手工实现还是比较简单,小型字符串甚至不需要你去求 nex...

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

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

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

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

  • KMP算法

    字符串匹配算法之KMP KMP算法最主要的地方是求next数组,next数组保存的是当前失配节点(下标index)...

  • KMP算法

    实在愚笨,一直没看懂KMP算法。在大神的指点下,终于弄懂了next数组的求解。 next[i]的含义是在ms[i]...

  • KMP算法的简单实现

    KMP的工作原理 阮一峰的博客讲的非常好点击访问!! KMP的代码实现 动态规划求解NEXT 这里设NEXT数组等...

  • 问答|KMP算法学习笔记

    问题 目录KMP是什么,做什么用的KMP算法的高效体现在哪如何KMP算法的next数组KMP的代码KMP的时间复杂...

  • KMP算法理解

    文章大纲:1.KMP算法概念2.KMP算法中最核心的next[] 数组是如何生成的3.使用KMP算法 匹配字符串 ...

  • kmp_algorithm

    tips:kmp算法分两个步骤:1)计算子串的next数组2)匹配子串conclusion:其实求next数组和匹...

  • KMP实现

    kmp next数组 理解

网友评论

      本文标题:KMP 算法中 next 数组手工求解

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