设字符串S=’aabaabaabaac’ P=’aabaac’
1. 给出S和P的next值和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的指针从i到p(f(i-1)+1)也是一种浪费,所以在pi和p(f(i-1)+1)位置相同的地方,将p(i-1)的f(i-1)值换成f(f(i-1)),从低位向高位计算替换。.
S的nextval值为”-1,0,-1,-1,0,-1,-1,0,-1,-1,7,-1”
T的nextval值为”-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相同,因为没有涉及到他们不同的失败值。