1. 程式人生 > >KMP之計算Next陣列

KMP之計算Next陣列

KMP的Next陣列:模式串的字首與字尾的“相交”長度

KMP演算法步驟:

1.先算next陣列

2.若失配(此時模式串下標為j),利用Next陣列求出失配後滑動的新位置

  a.Next[j] \geq 0,則模式串右移 j-Next[j]

  b.Next[j] = -1,則模式串右移 j+1

 

初始 i = 0, j = -1,Next[ 0 ] = -1(為了後面計算方便);

Step1:

  由於j == -1,i&j++,且Next[i] = j,即Next[1] = 0; 此時 i = 1, j = 0;

  下一個迴圈:p[ i ] != p[ j ],所以 j = Next[ j ] = Next[ 0 ] = -1,j回退

  j == -1, i&j++,此時 i = 2, j = 0; Next[ i ] = j,即Next [ 2 ] = 0

Step2:

  p [ 2 ] == p [ 0 ] -> i&j++ -> i = 3, j = 1, Next[ 3 ] = 1;