next[1]=0 根据(4)
next[2]=-1 根据(2)
next[3]=0 根据(3)虽 T[0]=T[2]但 T[1]=T[3]被划入(4)
next[4]=2 根据(3) T[0]T[1]=T[2]T[3]且 T[2] !=T[4]
next[5]=-1 根据(2)
next[6]=1 根据(3) T[0]=T[5]且 T[1]!=T[6]
next[7]=0 根据(3)虽 T[0]=T[6]但 T[1]=T[7]被划入(4)
next[8]=2 根据(3) T[0]T[1]=T[6]T[7]且 T[2] !=T[8]
即
下标
0 1 2 3 4 5 6 7 8
T a b a b c a a b c
next -1 0 -1 0 2 -1 1 0 2
只要理解了 next[3]=0,而不是=1,next[6]=1,而不是= -
1,next[8]=2,而不是= 0,其他的好象都容易理解。
03) 来个特殊的,求 T=”abCabCad”的模式函数的值。
下标
0 1 2 3 4 5 6 7
T a b C a b C a d
next -1 0 0 -1 0 0 -1 4
next[5]= 0 根据(3)虽 T[0]T[1]=T[3]T[4],但 T[2]==T[5]
next[6]= -1 根据(2)虽前面有 abC=abC,但 T[3]==T[6]
next[7]=4 根据(3)前面有 abCa=abCa,且 T[4]!=T[7]
若 T[4]==T[7],即 T=” adCadCad”,那么将是这样:next[7]=0,而不是= 4,
因为 T[4]==T[7].
下标
0 1 2 3 4 5 6 7
T a d C a d C a d
next -1 0 0 -1 0 0 -1 0
如果你觉得有点懂了,那么
练习:求 T=”AAAAAAAAAAB”的模式函数值,并用后面的求模式函数值函
数验证。
意义:
next 函数值究竟是什么含义,前面说过一些,这里总结。
设在字符串 S 中查找模式串 T,若 S[m]!=T[n],那么,取 T[n]的模式函数值
next[n],
1. next[n]= -1 表示 S[m]和 T[0]间接比较过了,不相
等,下一次比较 S[m+1]和 T[0]