Page 334 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 334

브루트-포스법
                   이 알고리즘의 시간 복잡도는 O(mn)이지만 일부러 꾸민 패턴이 아니라면 시간 복잡도는 O(n)으로

                   된다고 알려져 있습니다. 단순한 알고리즘이지만 실제는 아주 빠르게 동작합니다.


                   KMP법
                   이 알고리즘의 시간 복잡도는 가장 나쁜 경우에도 O(n)입니다. 다만 처리가 복잡하고 패턴 안에 반복
                   이 없으면 효율이 좋지 않습니다. 그러나 검색 과정에서 검사하는 위치를 앞으로 되돌릴 필요가 없다는
                   특징이 있어 순서 파일을 읽어 들이며 검색할 때 많이 사용합니다.


                   Boyer-Moore법
                   이 알고리즘의 시간 복잡도는 가장 나쁜 경우라도 O(n)이고 평균적으로 O(n/m)입니다. 앞에서는 배
                   열을 1개만 사용하여 알고리즘을 구현했지만 2개의 배열을 사용하면 KMP법과 마찬가지로 배열을 만
                   드는 데 복잡한 처리가 필요하므로 효과가 떨어집니다. 1개의 배열을 사용하는 방법으로 간단하게 구
                   현한 Boyer-Moore법을 사용해도 충분히 빠릅니다.


                   이 알고리즘 가운데 가장 실용적인 문자열 검색 알고리즘은 간단하게 구현한 Boyer-Moore법이고
                   경우에 따라 브루트-포스법을 사용하기도 합니다.






                   실습 8-15는 strstr 함수를 사용하여 문자열을 검색하는 프로그램입니다.


                     실습 8-15                                               •완성 파일 chap08/strstr_test.c

                     01  /* strstr 함수를 사용한 프로그램 */
                                                                                 실행 결과
                     02  #include <stdio.h>
                                                                           strstr 함수
                     03  #include <string.h>
                                                                           텍스트 : ABABCDEFGHA
                     04                                                    패턴 : ABC
                     05  int main (void)                                   ABABCDEFGHA
                     06  {                                                      |
                     07    char s1[256], s2[256];                               ABC
                     08    char *p;
                     09    puts("strstr 함수");
                     10    printf("텍스트 : ");
                     11    scanf("%s", s1);
                     12    printf("패턴 : ");
                     13    scanf("%s", s2);
                     14    p = strstr(s1, s2);     /* 문자열 s1에서 문자열 s2를 검색 */




                   334   C 알고리즘
   329   330   331   332   333   334   335   336   337   338   339