정의
Divide and Conquer(분할정복)은 해결하기 힘든 큰 문제를 작은 문제로 분할하여 해결(정복)한 후 병합하는 알고리즘이다.
접근법
분할정복은 보통 다음과 같은 3단계의 과정을 거친다.
1. Divide(분할) : 문제를 더 작은 문제들로 분할
2. Conquer(정복) : 분할한 작은 문제들을 해결한다.
3. Combine(병합) : 작은 문제들의 해결법을 병합해 큰 문제의 해결법을 찾는다.
특징
1. 문제를 나눌 때 보통 재귀(recursion)를 많이 사용한다.
2. 재귀(recursion)를 이용할 때 오버헤드가 커 메모리를 많이 사용할 수 있다.
예시
Merge Sort(병합 정렬)
병합 정렬은 분할정복의 대표적인 예이다. n개의 데이터를 가진 배열을 오름차순으로 정렬하기 위해 병합정렬을 사용한다면 아래와 같은 3단계의 과정을 거치게 된다.
1. Divide(분할) : n개의 원소를 갖는 배열을 n/2 개의 원소를 갖는 작은배열 2개로 나눈다.
2. Conquer(정복) : 각각의 작은 배열들을 정렬한다.
3. Combine(병합) : 정렬된 작은 배열들을 병합한다.
예를 들어 다음과 같은 과정을 거치게 된다.
반응형
'Computer Science > [알고리즘]' 카테고리의 다른 글
[알고리즘] 백트래킹(Backtracking) | C언어 N-Queen구현 (2) | 2021.07.27 |
---|---|
[알고리즘] 너비 우선 탐색(Breadth First Search : BFS) 이란? (0) | 2021.07.26 |
[알고리즘] 깊이 우선 탐색, DFS(Depth First Search)알고리즘이란?| C언어 DFS 구현 (0) | 2021.07.26 |
[알고리즘] 그리디(Greedy), 탐욕 알고리즘 | 거스름돈 문제 (0) | 2021.07.21 |
[알고리즘] 동적계획법(Dynamic Programming, DP)이란? 다이나믹 프로그래밍 이란? 피보나치 수열 (0) | 2021.07.15 |