KMP算法中的next函数值求法的原理

RT,是next函数值求法的[color=red]原理[/color]!不是求法!谢谢!
[code="java"]public int[] getNext(char[] pattern) {

int pattern_len=pattern.length;

int[] next=new int[pattern_len];

next[0]=-1;next[1]=0;

for (int i = 2; i < pattern_len; i++) {

int j=i;

while(j>1) {

if (pattern[i-1]==pattern[next[j-1]]) {

next[i]=next[j-1]+1;

break;

}else {

j=next[j-1];

}

}

if (j==1) {

next[i]=1;

}

}

return next;

}[/code]

http://www.cppblog.com/oosky/archive/2006/07/06/9486.html

你这程序有问题,我测试了下,返回的是-1,0,0,0,0....
这程序的目的是什么?
public class NextTest {
public static int[] getNext(char[] pattern) {

int pattern_len=pattern.length;

int[] next=new int[pattern_len];

next[0]=-1;next[1]=0;

for (int i = 2; i < pattern_len; i++) {

int j=i;

while(j>1) {

if (pattern[i-1]==pattern[next[j-1]]) {

next[i]=next[j-1]+1;

break;

}else {

j=next[j-1];

}

}

if (j==1) {

next[i]=1;

}

}

return next;

}

 public static void main(String[] args){
     char[] a={'a','e','f','g','w'};
     int[] b= getNext(a);
     for(int i=0;i<b.length;i++){
         System.out.println(b[i]);
     }
 }

}

[url]http://c610367182.iteye.com/blog/1947316[/url]