시간 복잡도가 점화식으로 정의될 때, 마스터 정리를 이용해서 시간 복잡도를 계산할 수 있다. 마스터 정리와 마스터 정리의 사용 조건에 대해 간단히 정리해보자.
마스터 정리 조건
시간 복잡도 T(n) = aT(n/b) + f(n)으로 정의될 때,
- f(n)이 다항식(polynomial function)이어야 한다
- a >=1 && b >=1 인 양의 실수이어야 한다. 그 말은 즉 문제를 분할 했을 때 더 작은 문제가 되어야 한다는 의미이다. 만약 b가 1보다 작은 양의 실수면 문제를 분할했을 때 더 큰 문제가 되므로 안된다
- 정규 조건(Regularity Condition)을 의미하는 a*f(n/b) <= c*f(n) 를 만족하면서 동시에 1보다 작은 c가 존재해야 한다. 이 말도 결국은 문제를 분할 했을 때 더 작은 문제가 되어야 한다는 것을 의미한다. f(n)이 삼각함수 같은 주기 함수일 때 만족하지 않을 수 있다.
위 세 조건을 모두 만족할 때 3가지 케이스로 나뉘어서 시간 복잡도를 구할 수 있다.
여기서 Big-Oh(O), Theta(θ), Omega(Ω) notation에 대해 간략히 정리해보면
마스터 정리 예시로 힙 정렬 포스팅에서 사용했던 MaxHeapify를 마스터 정리로 시간 복잡도를 구해보자(https://welikecse.tistory.com/58) MaxHeapify의 시간 복잡도는 점화식 T(n) = T(2n/3) + θ(1)로 표현할 수 있었다. 우선 마스터 정리 사용 조건을 모두 만족하는 것을 확인할 수 있고, T(n) = aT(n/b) + f(n) 식에서 a = 1, b = 3/2인 것까지 확인할 수 있다. 지수가 1인 로그는 0이므로 2번째 case에 해당하는 것을 확인 할 수 있으므로
Reference
https://coloredrabbit.tistory.com/94
'공부 > Algorithm' 카테고리의 다른 글
JPS(Jump Point Search) Algorithm (0) | 2022.02.17 |
---|---|
Dijkstra algorithm(다익스트라 알고리즘) 구현 (0) | 2021.08.11 |
병합 정렬(Merge sort) (0) | 2021.08.10 |
DFS(Depth First Search) & BFS(Breadth First Search) (0) | 2021.08.10 |
힙 정렬 (Heap Sort) 구현 (0) | 2021.08.07 |