Profile

Naive Search / Brute Force Search (고지식한 패턴 검색)

고지식한 패턴 검색

본문이 “ABCABACDC” 일 때, 찾고자 하는 문자열 패턴은 “BA”이다.
// 알고리즘 첫 번째 루틴 A B C A B A C D C | B A // 알고리즘 두 번째 루틴 A B C A B A C D C | B A A B C A B A C D C | | B A ... // 일치하는 패턴을 찾음 A B C A B A C D C | | B A
C
어떠한 요령없이 패턴과 일치하는지 하나씩 비교하며 찾는 이 알고리즘을 고지식한 검색 (Naive Search) 또는 무식한 검색 (Brute Force Search) 라고 한다.
본문의 길이가 N이고, 패턴의 길이를 M 이라 할 때, 본문 속에 존재하는 패턴을 찾기 위해 최악의 경우 N*M 번의 비교를 수행해야한다.

구현

int BruteForce(char* Text, int TextSize, int Start, char* Pattern, int PatternSize) { int i, j = 0; for (i=Start; i <= TextSize - PatternSize; i++) { for (j=0; j<PatternSize; j++) // PatternSize 만큼 Pattern 을 순회하며 본문비교 { if ( Text[i+j] != Pattern[j] ) // 본문과 패턴내의 문자열이 같지 않으면 break break } if ( j >= PatternSize) // j 가 PatternSize 이상이면 일치하는 문자열을 찾음 return i; // 해당 인덱스 반환 } return -1; }
C