자료구조, 알고리즘 입문/문자열 검색 알고리즘 3

[문자열 검색 알고리즘] 보이어 무어(BM)법

보이어 무어법의 특징 이 알고리즘을 고안한 보이어와 무어의 이름을 따서 BM법이라고도 함 KMP법보다 효율적이어서 실제 문자열 검색에서 주로 사용 패턴의 끝 문자에서 시작하여 앞쪽을 향해 검사를 수행 일치하지 않는 문자를 발견하면 미리 준비한 표를 바탕으로 패턴이 이동하는 값을 결정함 시간복잡도는 최악의 경우라도 O(n)이고 평균 O(n / m)이다. 보이어 무어법은 배열을 1개만 사용해도 충분히 빠르다. 보이어 무어법의 진행 과정 위 그림처럼 패턴에 포함되지 않는 문자를 텍스트에서 발견하면 그 위치까지는 건너뛸 수 있다. 그러므로 패턴을 비교하는 1~4번째 과정을 생략하고 패턴을 오른쪽으로 한번에 4칸 밀면 다음 그림과 같이 된다. 여기서 패턴의 마지막 문자 "C"를 텍스트와 비교하면 일치하므로 1칸 ..

[문자열 검색 알고리즘] KMP법

KMP법이란? Knuth-Morris-Pratt법의 줄임말로 이 알고리즘을 고안한 크누스, 모리스, 프래트의 이름에서 따온 용어이다. 브루트 포스법은 일치하지 않는 문자를 만나면 다시 패턴의 첫 문자부터 검사를 수행하지만, KMP법은 검사 결과를 효율적으로 사용한다. KMP법 알아보기 1. 텍스트 "ZABCABXACCADEF"에서 패턴 "ABCABC를 검색할 때 KMP법 알고리즘을 생각해보면 다음과 같다. 먼저 위의 그림처럼 텍스트와 패턴의 첫 문자부터 차례로 검사를 수행한다. 텍스트의 첫 문자 "Z"는 패턴에 포함되지 않는 문자이므로 일치하지 않는다. 2. 이제 패턴을 오른쪽으로 1칸 민다. 그럼 위와 같이 비교하는데, 패턴의 앞쪽부터 차례로 검사를 수행해가면 패턴의 마지막 문자 "D"가 텍스트의 "X..

[문자열 검색 알고리즘] 브루트 포스법

문자열 검색이란? 문자열 검색은 어떤 문자열 안에 다른 문자열이 포함되어 있는지 검사하고, 만약 포함되어 있다면 어디에 위치하는지 찾아내는 것 예를 들어 문자열 "STRING"에서 "IN"을 검색하면 성공하지만, 문자열 "QUEEN"에서 "IN"을 검색하면 실패함 문자열 검색에서 검색되는 쪽의 문자열을 텍스트(text), 찾아내는 문자열을 패턴(pattern)이라고 함 브루트 포스법이란? 문자열 검색 알고리즘 중 가장 기초적이고 단순한 알고리즘. 선형 검색을 단순하게 확장한 알고리즘이라서 단순법이라고 불린다. 텍스트 "ABABCDEFGHA"에서 패턴 "ABC"를 브루트 포스법으로 검색하는 순서는 다음과 같이 진행된다. 1. 텍스트의 첫 문자 "A"에서 시작하는 문자 3개가 패턴 "ABC"와 일치하는지 검..