KMP 알고리즘

A/Algorithm 2011. 10. 28. 12:41
#include 
#include 
char s[1000]={0},p[100]={0};
int n,m,pi[100]={0};
void find_pi()
{
int i=0,j=-1;
pi[0]=-1;
while(i < m)
{
if(j==-1 || p[i]==p[j])
{
i++,j++;
pi[i]=j;
}
else j=pi[j];
}
}
void kmp()
{
int i=0,j=0;
while(i < n)
{
if(j==-1 || s[i]==p[j]) i++,j++;
else j=pi[j];
if(j==m)
{
printf("Match : %d to %d\n",i-m+1,i);
j=pi[j];
}
}
}
int main(void)
{
scanf("%s",s);
scanf("%s",p);
n=strlen(s),m=strlen(p);
find_pi();
kmp();
return 0;
}
출처 : http://211.228.163.31/30stair/KMP_doc/KMP_doc.php?pname=KMP_doc

'A > Algorithm' 카테고리의 다른 글

연결성 문제를 위한 가중 퀵병합 방식  (0) 2011.10.27
재밋는? 러시아 페인트공 알고리즘  (0) 2011.10.27
냅색(Knapsack:배낭) 문제  (0) 2011.10.27
토끼와 거북이 알고리즘  (0) 2011.10.27
XOR 교체 알고리즘  (0) 2011.10.27

설정

트랙백

댓글