1、next[ ] 数组
next [ j ]=s 的最长相等前后缀长度加 1
next[1]=0 (规定) next[2]=1
KMP平均时间复杂度为O(n+m)
2、nextval[ ] 数组
nextval数组就是在next数组的基础上,把回溯的一步一步的中间步骤省略,直接写出最终要移动的位置。(因为根据next数组值找到上一个跳转位置的时候,这个位置也有一个对应的next数组值,因此有可能不是最终位置,还要根据这个位置的next数组往回找)。
具体的方法:用 i 所对应的next [ i ] 所指的关键字与 i 所指的关键字进行比较。
如果不同,则nextval [ i ] = next [ i ]
如果相同,则nextval [ i ]用next [ i ] 所指的上一个位置所对应的nextval [ next [ i ] ] 来代替,从而达到优化的目的。
3、例题:
已知模式串T=‘abababcabc’ ,则next函数值及nextval函数值为?