728x90
패턴 매칭
패턴 매칭에 사용되는 알고리즘들
- 고지식한 패턴 검색 알고리즘 ex) 브루트 포스
- 카프-라빈 알고리즘
- KMP 알고리즘
- 보이어-무어 알고리즘
고지식한 알고리즘 (Brute-Force)
- 본문 문자열을 처음부터 끝까지 차례대로 순회하면서 패턴 내의 문자들을 일일이 비교하는 방식으로 동작
알고리즘 설명
고지식한 패턴 검색 알고리즘
// p[] : 찾을 패턴 -iss
// t[] : 전체 텍스트 - This iss a book
// M : 찾을 패턴의 길이
// N : 전체 텍스트의 길이
// i : t의 인덱스
// j : p의 인덱스
BruteForce(char[] p, char[] t) {
i = 0, j = 0
while(j<M and i<N) {
if (t[i] != p[j])
i = i-j;
j=-1;
i = i+1, i=j+1
}
if (j==M) return i-M;
else return -1;
}
고지식한 패턴 알고리즘의 시간 복잡도
- 최악의 경우 시간 복잡도는 텍스트의 모든 위치에서 패턴을 비교해야 하므로 O(MN)이 됨
- 예시에서는 최악의 경우 약 10,000*80 = 800,000 번의 비교가 일어난다
- 비교 횟수를 줄일 수 있는 방법은 없는가?
보이어 무어 알고리즘
- 오른쪽에서 왼쪽으로 비교
- 대부분의 상용 소프트웨어에서 채택하고 있는 알고리즘
- 보이어-무어 알고리즘은 패턴의 오른쪽 끝에 있는 문자가 불일치하고 이 문자가 패턴 내에 존재하기 않는 경우, 이동 거리는 무려 패턴의 길이만큼이 된다
오른쪽 끝에 있는 문자가 불일치 하고 이 문자가 패턴 내에 존재할 경우
보이어-무어 알고리즘 예
728x90
'알고리즘' 카테고리의 다른 글
자료구조 트리 Tree - 정의, 이진 트리 (0) | 2023.09.25 |
---|---|
자료구조 연결 스택, 연결 큐 (0) | 2023.09.24 |
재귀 호출, Memoization (0) | 2023.09.07 |
탐욕 알고리즘 Greedy Algorithm (0) | 2023.08.25 |
완전 검색 Exhaustive Search (0) | 2023.08.24 |