3. POSTECH Computer Algorithm Team
분할정복의 가장 기본적인 아이디어는, 어떤 문제를 풀기 위해 그 문제를 여러 개로 나누어서 푼 후, 그 해답을 합
쳐서 최종적인 해답을 도출하는 것이다.
포스텍에서 가장 키가 큰 사람을 찾기 위해 각 학번마다 키가 가장 큰 사람을 찾아내서 비교하고, 각 학번에서 키
가 가장 큰 사람을 찾기 위해 동일 학번내의 각 분반에서 키가 가장 큰 사람을 찾아내서 비교한다면 분할정복의 아
이디어를 사용한 것이다.
분할정복
4. POSTECH Computer Algorithm Team
분할정복은 다음과 같은 때에 주로 사용된다.
1. 주어진 문제가 조금 더 작은 범위인 여러 개의 같은 문제로 나뉠 수 있을 때
2. 각 소문제가 대문제와 근본적으로 동일한 재귀적 방법으로 해결될 때
3. 각 소문제들의 해답을 합침으로써 대문제를 풀 수 있을 때
분할정복
5. POSTECH Computer Algorithm Team
마스터 정리는, 문제를 재귀적으로 푸는 알고리즘의 시간 복잡도를 간단하게 구하는 방법이다.
모든 재귀적 알고리즘의 시간 복잡도를 구할 수 있는 것은 아니지만, 상당히 유용하게 쓰인다.
길이 N의 문제를 푸는데에 T(N)이 걸린다고 하자.
이때, T(N)은 T(N) = aT(
𝑁
𝑏
) + 𝑓(𝑁) 이라는 점화식을 만족한다. (a > 0, b > 1)
그렇다면,
T(N) ∈ O(𝑁log 𝑏 𝑎
) 𝑖𝑓 𝑓 𝑁 ∈ 𝑂(𝑁log 𝑏 𝑎 − 𝜀
) for some constant 𝜀 > 0
O(𝑁log 𝑏 𝑎
log 𝑁) 𝑖𝑓 𝑓 𝑁 ∈ O(𝑁log 𝑏 𝑎
)
O(f(N)) 𝑖𝑓 𝑓 𝑁 ∈ 𝑂(𝑁log 𝑏 𝑎 + 𝜀
) 이고 충분히 큰 N과 1보다 큰 c에 대해 af(
𝑁
𝑏
) ≤ 𝑐𝑓 𝑁
Master Theorem
6. POSTECH Computer Algorithm Team
Master Theorem의 직관적인 설명
g(n) = 𝑛log 𝑏 𝑎
라 할 때,
1. g(n)이 더 무거우면 g(n)이 시간 복잡도를 결정한다
2. g(n)과 f(n)의 무게가 같다면 g(n)에 log 𝑛 을 곱한 것이 시간 복잡도이다
3. f(n)이 더 무거우면 f(n)이 시간 복잡도를 결정한다
Master Theorem https://blog.naver.com/yyj9301/221240585554
8. POSTECH Computer Algorithm Team
히스토그램은 직사각형 여러 개가 아래쪽으로 정렬되어 있는 도형이다. 각 직사각형은 같은 너비를 가지고 있지만,
높이는 서로 다를 수도 있다. 예를 들어, 왼쪽 그림은 높이가 2, 1, 4, 5, 1, 3, 3이고 너비가 1인 직사각형으로 이
루어진 히스토그램이다. 히스토그램에서 가장 넓이가 큰 직사각형을 구하는 프로그램을 작성하시오.
FENCE https://algospot.com/judge/problem/read/FENCE
10. POSTECH Computer Algorithm Team
- 무식하게 푼다면 O(𝑁2
)이 걸린다!
- 분할정복: 나눈다 -> 푼다 -> 합친다
이 문제에서,
나누는 것은 히스토그램을 왼쪽 오른쪽으로 나누는 것이고
푸는 것은 왼쪽과 오른쪽의 히스토그램에서 가장 큰 직사각형의 넓이를 구하는 것이다
그렇다면 합치는 것은?
왼쪽과 오른쪽의 최댓값을 비교하기만 하면 안된다.
왼쪽 부분과 오른쪽 부분의 히스토그램을 모두 사용할 때의 최댓값도 구해야한다!
FENCE
15. POSTECH Computer Algorithm Team
FENCE
이와 같은 행위를 반복하면, 왼쪽과 오른쪽 부분을 동시에 사용하며 넓이가 가장 큰 직사각형을 찾을 수 있다.
여기서, 합치는 과정의 시간 복잡도는 O(N)이다.
16. POSTECH Computer Algorithm Team
이와 같은 방법으로, 우리는 문제를 해결할 수 있다.
- 그렇다면 이 알고리즘의 시간 복잡도는?
길이 N짜리 문제를 풀기 위해서는 길이
𝑁
2
짜리 문제를 2개 풀어야 하고, 합치는 과정에서 N만큼의 시간이 필요하다.
길이
𝑁
2
짜리 문제를 풀기 위해서는 길이
𝑁
4
짜리 문제를 2개 풀어야 하고, 합치는 과정에서
𝑁
2
만큼의 시간이 필요하다.
길이
𝑁
4
짜리 문제를 풀기 위해서는 . . .
Master Theorem을 적용해보자!
FENCE
17. POSTECH Computer Algorithm Team
문제에서, T(N) = 2T(
𝑁
2
) + 𝑁
Master Theorem에서 a = 2, b = 2, f(N) = N인 경우이다. 조건에 대입해보자.
T(N) ∈ O(𝑁log 𝑏 𝑎
) 𝑖𝑓 𝑓 𝑁 ∈ 𝑂(𝑁log 𝑏 𝑎 − 𝜀
) for some constant 𝜀 > 0
O(𝑁log 𝑏 𝑎
log 𝑁) 𝑖𝑓 𝑓 𝑁 ∈ O(𝑁log 𝑏 𝑎
)
O(f(N)) 𝑖𝑓 𝑓 𝑁 ∈ 𝑂(𝑁log 𝑏 𝑎 + 𝜀
) 이고 충분히 큰 N과 1보다 큰 c에 대해 af(
𝑁
𝑏
) ≤ 𝑐𝑓 𝑁
f(N) ∈ O(N)이고 log 𝑏 𝑎 = 1 이므로 가운데에 해당된다.
=> T(N) ∈ (NlogN)
FENCE
18. POSTECH Computer Algorithm Team
https://algospot.com/judge/problem/read/QUADTREE - QUADTREE
https://algospot.com/judge/problem/read/FENCE – FENCE
https://www.acmicpc.net/problem/2751 – Merge Sort
https://algospot.com/judge/problem/read/FANMEETING - FANMEETING
https://www.acmicpc.net/problem/1992 - 쿼드트리의 이해를 돕기 위한 문제
문제 풀기