Divide and Conquer (분할 정복): 큰 문제를 작은 하위 문제로 나누어 각각 해결한 뒤, 결과를 결합하여 원래 문제를 해결하는 알고리즘 기법.
| 구분 | Merge Sort | Quick Sort |
|---|---|---|
| Divide | 배열을 절반으로 분할 | Pivot 기준 Partition |
| Conquer | 각 부분 배열 재귀 정렬 | 각 부분 배열 재귀 정렬 |
| Merge | 정렬된 배열 병합 | 별도 병합 불필요 |
일반적인 Recurrence Relation (점화식):
[
T(n)=aT(n/b)+f(n)
]
n: 입력 크기.a: 생성되는 하위 문제 개수.n/b: 각 하위 문제의 크기.f(n): 분할·병합 등 재귀 호출 외부의 작업 비용.하위 문제가 동일한 크기일 때 Master Theorem (마스터 정리) 등을 이용해 복잡도 계산 가능.
예시: Merge Sort
[
T(n)=2T(n/2)+O(n)=O(n\log n)
]
| 알고리즘 | 핵심 아이디어 | Time |
|---|---|---|
| Power Function (거듭제곱) | 지수를 절반씩 줄이며 제곱 | O(log N) |
| Binary Search (이진 탐색) | 정렬된 탐색 범위를 절반으로 축소 | O(log N) |
| Closest Pair of Points (최근접 점 쌍) | 점들을 분할하고 경계의 후보까지 검사 | O(N log N) |
| Strassen's Algorithm (스트라센 행렬 곱셈) | 행렬을 분할하여 곱셈 횟수 감소 | O(N^2.8074) |
| FFT (고속 푸리에 변환) | 변환을 짝수·홀수 부분 문제로 분할 | O(N log N) |
| Karatsuba Algorithm (카라추바 곱셈) | 큰 정수 곱셈을 3개의 작은 곱셈으로 분할 | O(N^1.585) |
| Merge Sort (병합 정렬) | 분할 → 정렬 → 병합 | O(N log N) |
| Quick Sort (퀵 정렬) | Pivot으로 분할 후 재귀 정렬 | 평균 O(N log N) |
※ Strassen의 지수는 원문의 2.8974가 아닌 약 2.8074가 정확함. Quick Sort의 최악 시간 복잡도는 O(N²).
핵심: Divide and Conquer는 Divide → Conquer → Merge를 통해 큰 문제를 작은 문제로 분해하여 해결하는 기법. 하위 문제의 독립성과 효율적인 분할·결합 방법이 성능을 결정함.