페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#5315

마스터 정리 1s 32MB

문제

마스터 정리(Master Theorem)는 재귀식으로 표현된 알고리즘의 시간복잡도를 간단하게 계산하는 방법이다.

 

어떤 알고리즘의 시간 복잡도 함수 T(n)이 다음과 같은 형태일 때,

  • T(n) = a \times T(\dfrac nb) + c \times n^k

  • a, b, c, k는 상수이며, 0<a, 0<c, 2{\le}b, 0{\le}k)

이 함수 T(n)의 시간 복잡도 클래스는 다음과 같다.

  • T(n) ∈ θ(n^k), if a < b^k

  • T(n) ∈ θ(n^k log_2n)​, if a = b^k

  • T(n) ∈ θ(n^{log_b a})​, if a > b^k

예를 들어 T(n) = 8 \times T(\dfrac n4) + 5 \times n^2이라면,

a8이고, b^k4^2 = 16이므로 a < b^k가 성립되어 O(N^2)이된다.

 

만약 T(n)8 \times T(\dfrac n2) + 5 \times n^2이라면,

a8이고, b^k2^2 = 4이므로 a > b^k가 성립되어 O(N^{log_2 8})이된다.

이는 정리하면 O(N^3)이 된다.

 

시간복잡도 T(n)이 입력되면 마스터 정리를 통하여 시간복잡도를 간단하게 바꾸어 출력하는 프로그램을 작성하시오.​ 


입력

한 줄에 T(n)에 해당하는 수식이 입력예와 같이 입력된다.

이 때, 모든 연산자는 공백으로 띄워져 있으며 각 상수 a,b,c,k1보다 크고 20,000보다 작은 데이터가 입력된다.


출력

시간복잡도를 big O notation 방식으로 출력된다.

모든 데이터는 정답이 있음이 보장된다.


예제 #1

8 * T(n/4) + 5 * n^2
O(N^2)

예제 #2

8 * T(n/2) + 5 * n^3
O(N^3 * log2(N))

예제 #3

8 * T(n/2) + 5 * n^2
O(N^3)

O(N^log2(8))의 경우 O(N^3)로 수정한다.


예제 #4

2 * T(n/2) + 1 * n^1
O(N^1 * log2(N))

합병정렬(merge sort)의 시간복잡도이다.



출처

klee

로그인해야 코드를 작성할 수 있어요.