kmp 알고리즘에서 preprocessing(전처리) 과정에 관한 질문입니다.
글쓴이: canuyes / 작성시간: 목, 2013/03/28 - 12:47오후
안녕하세요?
현재 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 알고리즘의 전처리과정의 알고리즘에 대해 알려주실수 있으신가요?ㅜㅜ
이제 곧 점심시간이라 점심전에 올려봅니다 ㅠㅠ
Forums:


제가 이해한걸 쓴
제가 이해한걸 쓴 글입니다.
http://dol9.tistory.com/122
전처리 과정이라는게,
어느 위치에서 틀렸을때 어디로 이동할거냐를 정하는 건데,
뭉탱뭉탱 움직이기위해 prefix, suffix를 사용한다고 생각했습니다.
도움이 됐으면 좋겠네요
답변 감사합니다.
답변 감사드립니다.
그런데 전 kmp의 진행과정보다는 kmp의 preprocessing의 작동원리가 궁금합니다. ㅜㅜ
링크에는 preprocessing 자체에 초점이 맞추어져 있지는 않는것 같네요...
계속 구글링 하던중
http://www.iti.fh-flensburg.de/lang/algorithmen/pattern/kmpen.htm
에서 나름 만족할만한 설명을 찾았습니다.
하지만 아직 구현된 코드가 맞는 건 알겠으나, 머리속에서 정리되서 스스로 작성할 수 있을 정도로 이해한것은 아닌것같습니다.
추후에 혹시 preprocessing 함수에 대해 더 설명해주 실 수 있으시다면 설명해주세요..
답변 정말 감사드립니다. ㅠㅠ
asd
asd
KMP 전처리 작업이 pattern mismatch
KMP 전처리 작업이 pattern mismatch 시 인덱스를 얼마만큼 조정할 것인가 라는 것만 이해하면
나머지는 스스로 생각해 보셔도 똑같은 알고리즘 나올 듯해요.
알고리즘은 스스로 생각해 보는 게 실력 향상법임.
댓글 달기