안녕하세요?
현재 kmp알고리즘을 공부중에 있는 학생입니다.
kmp알고리즘을 공부중 전처리과정(preprocessing)의 구현에 관한 어려움믈 겪고 있어 질문남깁니다.

제가 공부중인 서적과 다수의 웹자료에 전처리과정은 아래와 같이 구현되어있습니다.

void preprocess(char* pattern,int* table){

     int len=strlen(pattern);

     int i=0,j=-1;

     table[0]=-1;

     while(i<len){

                  while(j>-1&&pattern[i]!=pattern[j]){

                                                      j=table[j];

                  }

                  i++;j++;

                  table[i]=j;

     }

     return;

}

3시간 가량 생각해보고 고민해보았는데 코드가 이해가 되질않네요..
자괴감만 커져 갑니다...ㅠㅠ
strcmp등을 이용하여 직접 접두부를 찾는 방법도 생각해보았지만 
그런 방법을 선택시에 위의 코드보다 복잡도가 크게 증가한다고 하네요...

구글링중 다음 링크하단에서 꽤나 충실한 설명을 보았지만
http://211.228.163.31/30stair/KMP_DOC1/KMP_DOC1.php?pname=KMP_DOC1
부족한 능력 탓인지 이해가 잘 되지 않네요...

혹시 kmp 알고리즘의 전처리과정의 알고리즘에 대해 알려주실수 있으신가요?ㅜㅜ

그리고 혹시 kldp나 이곳 dc 이외에 알고리즘 공부 관련하여 도움 얻을수 있는 공간을 알려 주실 수 있으신가요?