패턴찾기 알고리즘임. C로 작성함
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define Text 1000
#define Pattern1 5
#define Pattern2 10
int brute(char *T, char *P,int N,int M)
{
int i,j;
for(i = 0; i<= N-M; i++)
{
for(j = 0; j < M ; j++){
if(*(P+j) != *(T+i+j)) break;
}
if( j == M ) return i+1;
}
return -1;
}
void main(void)
{
int i,k;
char arr[Text] = {0},patt1[Pattern1] = {0},patt2[Pattern2] = {0};
srand(time(NULL));
for(i = 0 ; i<Text; i++)
*(arr + i) = rand() % 11 +97;
for(i = 0 ; i<Pattern1; i++)
*(patt1 + i) = rand() % 11 + 97;
for(i = 0 ; i<Pattern2; i++)
*(patt2 + i) = rand() % 11 + 97;
for(i = 0 ; i<Text; i++)
printf("%2c",*(arr + i));
printf("\n");
for(i = 0 ; i<Pattern1; i++)
printf("%2c",*(patt1 + i));
printf("\n이것은 직선적 알고리즘입니다.\n");
k = brute(arr, patt1,Text,Pattern1);
if( k == -1)
printf("찾는데 실패했습니다.");
else
printf("패턴은 텍스트의 %d번째 문자부터 나타남",k);
printf("\n");
for(i = 0 ; i<Pattern2; i++)
printf("%2c",*(patt2 + i));
printf("\n이것은 직선적 알고리즘입니다.\n");
k = brute(arr, patt2,Text,Pattern2);
if( k == -1)
printf("찾는데 실패했습니다.");
else
printf("패턴은 텍스트의 %d번째 문자부터 나타남",k);
printf("\n");
return;
}
'it > 알고리즘' 카테고리의 다른 글
백준 4485 녹색 옷 입은 애가 젤다 (0) | 2018.11.24 |
---|---|
스택을 이용한 문제 (0) | 2015.01.06 |
힙을 이용한 트리 (0) | 2015.01.06 |
해시테이블 (0) | 2015.01.06 |
정렬 비교 (0) | 2015.01.06 |