nextval数组示例
j | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
模式串T | a | b | a | b | a | a | a | b | a |
next | 0 | 1 | 1 | 2 | 3 | 4 | 2 | 2 | 3 |
nextval | 0 | 1 | 0 | 1 | 0 | 4 | 2 | 1 | 0 |
求解方法
在求解nextval
数组之前,应首先求出next
数组,求解方法可以参考next数组如何求解
在得到next
数组之后,nextval
数组的求解就变得非常简单了:
nextval[1]=0
- 本位字符与
next
数组所对应的字符相比较,如果相等则为nextval
数组所对应的next
的值,如果不相等则为next
数组所对应的值
求解过程
以示例中的例子为例:
- 模式串
T[2]=b
,T[next[2]]=T[1]=a
,T[2]!=T[next[2]]
,因此nextval[2]=next[2]=1
- 模式串
T[3]=a
,T[next[3]]=T[1]=a
,T[3]==T[next[3]]
,因此nextval[3]=nextval[next[3]]=nextval[1]=0
- 模式串
T[4]=b
,T[next[4]]=T[2]=b
,T[4]==T[next[4]]
,因此nextval[4]=nextval[next[4]]=nextval[2]=1
- 模式串
T[5]=a
,T[next[5]]=T[3]=a
,T[5]==T[next[5]]
,因此nextval[5]=nextval[next[5]]=nextval[3]=0
- 模式串
T[6]=a
,T[next[6]]=T[4]=b
,T[6]!=T[next[6]]
,因此nextval[6]=next[6]=4
- 模式串
T[7]=a
,T[next[7]]=T[2]=b
,T[7]!=T[next[7]]
,因此nextval[7]=2
- 模式串
T[8]=b
,T[next[8]]=T[2]=b
,T[8]==T[next[8]]
,因此nextval[8]=nextval[next[8]]=nextval[2]=1
- 模式串
T[9]=a
,T[next[9]]=T[3]=a
,T[9]==T[next[9]]
,因此nextval[9]=nextval[next[9]]=0
因此,模式串ababaaaba
对应的nextval
数组为010104210