如果你确实只是想完成练习题 那看看这个解答吧 反正我算是看明白了
当用KMP算法时,进行查找时扫描指针的动作就只依赖于模式,而与目标无关.
所以解此类题时,只将焦点集中于模式串并根据失效函数定义公式计算即可.
公式如下: f(j)=K 或-1.
取K时,满足的条件为:0<=K<J,且使得P0..PK=P(J-K)..P(J).
(J依次从0到N-1进行计算.)
以下是引用恒翔在2004-10-8 15:13:45的发言:
请根据改进KMP算法计算以下三个模式串的对应的Next值?
aabbaaccaabb
abcdcbabcdcba
abacadacaba
最好能够根据该题进行详细的说明?不胜感激
对于第一串: aabbaaccaabb
分别编号:0 1 2 3 4 5 6 7 8 9 10 11
J=0:K无值,f(0)= -1
J=1:K=0, p0=p1, f(1)=0
J=2:K=0,1,p0<>p2,p0p1<>p1p2,f(2)= -1
J=3:K=0,1,2,p0<>p3,p0p1<>p2p3,p0p1p2<>p1p2p3, f(3)=-1
J=4:K=0,1,2,3, p0=p4,p0p1<>p3p4,p0p1p2<>p2p3p4;p0p1p2p3<>p1p2p3