POSTECH Computer AlgorithmTeam
- 문제를 풀기 위해 하나의 문제를 여러 개의 작은 문제로 나누어 푸는 방법
- 작은 문제를 풀고나서 그 결과를 합치는 과정이 존재함
- 보통 재귀함수가 많이 사용된다
분할정복 분할정복
4.
POSTECH Computer AlgorithmTeam
- 어떤 수 n이 주어졌을 때, 2 𝑛
을 빨리 구하는 방법?
- 반복문을 만들어서, 한번 돌때마다 2를 곱해준다 – O(N)
- 더 빠른 방법?
피보나치 수 분할정복
5.
POSTECH Computer AlgorithmTeam
분할정복
- 2 𝑛
= 2
𝑛
2 * 2
𝑛
2 이다!
- 2 𝑛
을 구하기 위해서는 2
𝑛
2을 구하고, 2
𝑛
2을 구하기 위해서는 2
𝑛
4를 구하고..
- n이 홀수라면? => 2 𝑛
= 2
𝑛−1
2 ∗ 2
𝑛−1
2 * 2
- 시간 복잡도 O(log2 𝑛)
- 로그 스케일로 빨라졌다!
6.
POSTECH Computer AlgorithmTeam
- 이렇게만 보면 DP와 분할정복의 차이를 잘 못 느낄 수도 있으니, 비교해보자.
- 피보나치 수열은 Fn = Fn-1 + Fn-2 로 정의된다 (F1 = 1, F2 = 1)
- Fn을 구하기 위해 DP와 분할정복을 사용해보자
DP vs 분할정복 DP vs 분할정복
7.
POSTECH Computer AlgorithmTeam
DP vs 분할정복
- Fn = Fn-1 + Fn-2 에서 Fn-1을 구했다면 Fn-2는 이미 메모에 저장되어 있으므로 계산할 필요가 없다
- 시간복잡도 O(N)
8.
POSTECH Computer AlgorithmTeam
DP vs 분할정복
- Fn을 구하기 위해 Fn-1을 구한 후, Fn-2을 구하기 위해 처음부터 다시 시작한다
- 시간복잡도 O(2 𝑛
)
9.
POSTECH Computer AlgorithmTeam
DP vs 분할정복
- Fn-1을 구하는 것은 Fn-2를 구하는 것과 연관되어있다.
- DP는 메모를 통해 중복되는 계산을 배제해서 빠르게 값을 얻어낸다.
- 분할정복의 경우, Fn-1을 구한 다음 Fn-2를 구할때 앞선 결과를 기억하지 않아서 중복되는 계산이 많다!
10.
POSTECH Computer AlgorithmTeam
DP vs 분할정복
- DP는 각 부분문제들이 서로 연관성이 있을 때 주로 사용한다
- 분할정복은 각 부분문제들이 서로 연관성이 없어 독립적으로 해결할 수 있을 때 주로 사용한다
- 그래서 분할정복으로 풀려면 부분문제를 잘 정의해야 한다.
11.
POSTECH Computer AlgorithmTeam
- 피보나치 수열을 구할 때, DP는 O(N)만에, 분할정복은 O(2 𝑛
)만에 구해냈다.
- DP가 빠르고 분할정복이 느린 이유는 피보나치 수열이 각 부분문제끼리 연관성이 있기 때문일까?
분할정복 < DP ? DP vs 분할정복
12.
POSTECH Computer AlgorithmTeam
- 어떤 수 n이 주어졌을 때, 2 𝑛
을 빨리 구하는 방법?
=> 2
𝑛
2 로 쪼개서 부분 문제를 푼다!
O(log2 𝑛)
분할정복 < DP ? DP vs 분할정복
13.
POSTECH Computer AlgorithmTeam
DP vs 분할정복
- 어떤 수 n이 주어졌을 때, 2 𝑛
을 빨리 구하는 방법?
- 2
𝑛
2 로 쪼개서 부분 문제를 푼다!
- 시간복잡도 O(log2 𝑛)
POSTECH Computer AlgorithmTeam
DP vs 분할정복
- 문제를 풀기위해 작은 문제로 나누어 푸는 방법을 사용할 때, 문제를 어떻게 해석하느냐에 따라
분할정복이 빠를 수도, DP가 빠를 수도 있다.
- 작은 문제들끼리의 연관성이 있더라도 좋은 알고리즘을 만든다면 분할정복이 더 빠를 수도 있다!
16.
POSTECH Computer AlgorithmTeam
- Sort란, 배열 내의 숫자를 크기 순으로 정렬하는 것
O(Nlog2 𝑁)
- Merge Sort : 숫자를 재배열하기 위해 각 배열을 절반으로 쪼개서
그 배열을 오름차순으로 만든다
=> 문제를 부분 문제로 나눈 후 푼다
- 두 배열을 합칠 때 다시 두 배열의 앞 숫자부터 오름차순으로 정렬한다
=> 부분 문제를 풀고나서 합친다
https://www.geeksforgeeks.org/merge-sort/
Merge Sort Merge Sort
17.
POSTECH Computer AlgorithmTeam
- https://www.acmicpc.net/problem/2447
- https://www.acmicpc.net/problem/1992
- https://www.acmicpc.net/problem/1780
- https://www.acmicpc.net/problem/6549 - 스택으로도 풀 수 있지만 분할정복으로 풀어보자
연습문제 분할정복