数据结构笔记--KMP算法简单理解

KMP算法中的函数值只和模式串有关,而和相匹配的主串无关。

例 主串:a c a b a a b a a b c a c a a b c

模式串:a b a a b c a c

1.首先,我们给模式串标上序号

2.之后,我们把模式串的所有前缀依次列出来(虽然前缀不能为串本身,但在这里我么也将其列在最后面)

3.接下来,我们要求得每一个子串中相等的前缀与后缀的最大长度

我们拿第五个子串作为例子

可以看出,这条子串有相同的前缀后缀:ab 长度为2

123步示意图

数据结构笔记--KMP算法简单理解_第1张图片

4.这样,我们就得到了一组序列,但是这并不是我们要的next数列,我们暂且把它叫做maxL数列

5.接下来我们将maxL数列复制一行,去掉最后一个值,在开头加上一个-1,往右平移一格,每个值+1,这就是我们想要的next数列

数据结构笔记--KMP算法简单理解_第2张图片

6.接下来来看nextVal数列

  1. 首先,第一个值填为0;
  2. 序号依次检查maxL值和next值是否相等,若不相等,填入对应的next值;

数据结构笔记--KMP算法简单理解_第3张图片

  1. 若相等,填入对应序号为next值得nextVal值

 

数据结构笔记--KMP算法简单理解_第4张图片

 

数据结构笔记--KMP算法简单理解_第5张图片

数据结构笔记--KMP算法简单理解_第6张图片

7.这样,我们就得到了nextVal数列。

 

数据结构笔记--KMP算法简单理解_第7张图片

 

你可能感兴趣的:(数据结构笔记)