KMP算法中next和nextval数组的计算方法

设字符串S=aabaabaabaac    P=aabaac

1.      给出SPnext值和nextvai;

2.      S作主串,P为模式串,试给出利用BF算法和KMP算法的匹配过程.

答:

1.
给出
S

P

next
值和
nextvai

;

失效函数采用的是清华殷人昆的数据结构上的函数。(有的人和他有点区别,本质一样)

f(j)=k,0<=k<j,且使得p0p1p2…pk = p(j-k)p(j-k+1)…pj;f(j)=-1,其他情况。

S=”aabaabaabaac”next值为”-1,0,-1,0,1,2,3,4,5,6,7,-1”

T=”aabaac”next值为”-1,0,-1,0,1,-1”

Nextval值是对next值的一种修正,因为在pi的字符和p(f(i-1)+1)的字符相同,导致从在模式T的指针从ip(f(i-1)+1)也是一种浪费,所以在pip(f(i-1)+1)位置相同的地方,将p(i-1)f(i-1)值换成f(f(i-1)),从低位向高位计算替换。.

Snextval值为”-1,0,-1,-1,0,-1,-1,0,-1,-1,7,-1”

Tnextval值为”-1,0,-1,-1,1,-1”

2.      S作主串,P为模式串,试给出利用BF算法和KMP算法的匹配过程.

BF

 

a

a

b

a

a

b

a

a

b

a

a

c

1

a

a

b

a

a

c

 

 

 

 

 

 

2

 

a

a

b

a

a

c

 

 

 

 

 

3

 

 

a

a

b

a

a

c

 

 

 

 

4

 

 

 

a

a

b

a

a

c

 

 

 

5

 

 

 

 

a

a

b

a

a

c

 

 

6

 

 

 

 

 

a

a

b

a

a

c

 

7

 

 

 

 

 

 

a

a

b

a

a

c

KMP(next)

 

a

a

b

a

a

b

a

a

b

a

a

c

1

a

a

b

a

a

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

a

a

b

a

a

c

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

a

a

b

a

a

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

此题KMP(nextval)的过程与next相同,因为没有涉及到他们不同的失败值。

 

    原文作者:KMP算法
    原文地址: https://blog.csdn.net/Suminchen/article/details/2047546
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞