분할 정복 알고리즘은 다양한 알고리즘 설계에서 핵심 원칙으로 사용되고 있다.
자주 접하는 개념 중에선 Quick Sort, Merge Sort가 분할 정복 알고리즘을 응용한 대표적인 예시이다. 고속 푸리에 변환(FFT)도 분할 정복 알고리즘 기반이라고 한다.
분할 정복(Divide and Conquer)은 큰 문제를 작은 부분 문제로 나누어 해결하는 알고리즘 설계 전략이다.
Divide and Conquer라는 이름의 어원은 원래 정치와 군사 전략에서 사용되던 용어로, 큰 적 또는 문제를 작은 부분으로 나누어 각각을 해결함으로써 전체를 제어하는 전략을 의미한다고 한다. (나무위키에 따르면 제국주의 시절 유럽 식민제국이 식민지인들의 단결을 막기 위해 주로 사용한 방법으로 유명한 분할통치 (Divide and Rule)에서 비롯되었다고 한다.)
어원에서 알 수 있듯 아이디어 자체는 오래 전부터 존재했으며, 이를 20세기 중반부터 컴퓨터 과학에서 활용하기 시작했다고 한다.
분할 정복 전략의 핵심 아이디어는 큰 문제를 해결하기 어렵다면, 그 문제를 더 작고 관리하기 쉬운 부분 문제로 나누어 각각 해결하고, 그 해결책들을 결합하여 원래의 문제를 해결하는 것이다.
이를 단계별로 구체화하면 다음과 같다: 분할 (Divide) -> 정복 (Conquer) -> 결합 (Combine)
1. 분할 (Divide): 현재의 문제와 동일하되 입력의 크기가 더 작은 다수의 부분 문제로 분할한다.
2. 정복 (Conquer): 부분 문제를 재귀적으로 풀어서 정복한다. 부분 문제의 크기가 충분히 작으면 직접적인 방법으로 푼다.
3. 결합 (Combine): 부분 문제의 해를 결합해 원래 문제의 해가 되도록 만든다.
(출처: Introduction to Algorithms)
장점:
단점:
병합 정렬 (Merge Sort)
퀵 정렬 (Quick Sort)
알고리즘 | 그래프 탐색 | BFS, DFS (1) | 2023.10.22 |
---|---|
알고리즘 | 정렬 기법 | 병합 정렬(Merge Sort) (2) | 2023.10.18 |
알고리즘 | 정렬 기법 | 퀵 정렬 (Quick Sort) (2) | 2023.10.17 |
알고리즘 | 계산 복잡도, Big-O 표기법 (1) | 2023.10.15 |
알고리즘 | 재귀(Recursion) (1) | 2023.10.15 |