chanhi.dev

시간 복잡도 분석 연습

2025.06.063분 읽기

Master Theorem

점화식이 T(n) = rT(n/c) + O(f(n))의 형태일 때

case1. f(n) = Ω(𝑛log_cr𝑛^{log\_c r}) 이면 T(n) = O(f(n))

case2. f(n) = Θ (𝑛log_crlogkn𝑛^{log\_c r}log^k n) 이면 T(n) = O(f(n)logn)

case3. f(n) = O(𝑛log_cr𝑛^{log\_c r}) 이면 T(n) = O( 𝑛log_cr𝑛^{log\_c r} )

T(n) = 2T(n/2) + O(n) => nlog_22=n1n^{log\_2 2} = n^1, f(n) = n => case2 => O(nlogn)
T(n) = T(n/2) + O(n) => nlog_21=n0n^{log\_2 1} = n^0, f(n) = n => case1 => O(n)
T(n) = T(n/2) + O(1) => nlog_21=n0n^{log\_2 1} = n^0, f(n) = 1 => case2 => O(1logn)
T(n) = 4T(n/2) + O(n) => nlog_24=n2n^{log\_2 4} = n^2, f(n) = n => case3 =>O(n2n^2)
T(n) = 3T(n/2) + O(n) => nlog_23=n1.xn^{log\_2 3} = n^{1.x}, f(n) = n => case3 => O(nlog_23n^{log\_2 3})
T(n) = T(n/3) + O(n2n^2) => nlog_31=n0n^{log\_3 1} = n^0, f(n) = n2n^2 => case1 => O(n2n^2)
T(n) = 2T(n/2) + O(nlogn) => nlog_22=n1n^{log\_2 2} = n^1, f(n) = nlogn => case2(k=1) => O(nlog2nnlog^2 n)
T(n) = T(n/3) + T(2n/3) + O(n)

Master Theorem 사용 못 함=> recursion tree 사용 => 두 개의 분기로 나뉨 (n/3, 2n/3) => 계속해서 각각 똑같은 비율로 나뉨 => 따라서 각 층 마다 합을 구하면 = n => 최종적으로 O(nlogn)

7-1.png

(2/3)^n = 1 -> 깊이 log_3/2 n

T(n) = T(n - 2) + T(2) + O(n)
= T(n-2) + O(n) = T(n-2) + cn = T(n-4) + c(n-2) + cn = ... => T(n) = O(n2n^2)

A(n) = 2A(n/4) + sqrtn\\sqrt{n} -> case2 -> O(sqrtnlogn\\sqrt{n}logn)
B(n) = 2B(n/4) +n -> case1 -> O(n)
C(n) = 2C(n/4) + n2n^2 -> case1 -> O(n2n^2)
D(n) = 3D(n/3) + sqrtn\\sqrt{n} -> case3 -> O(n)
E(n) = 3E(n/3) +n -> case2 -> O(nlogn)
F(n) =3F(n/3) + n2n^2 -> case1 -> O(n2n^2)
G(n) =4G(n/2) + sqrtn\\sqrt{n} -> case3 -> O(n2n^2)
H(n) =4H(n/2) +n -> case3 -> O(n2n^2)
I(n) =4I(n/2) + n2n^2 -> case2 -> O(n2lognn^2logn)
J(n) = J(n/2) + J(n/3) + J(n/6) + n

7-2.png

깊이: log n, 문제 크기 n으로 일정 -> O(nlogn)

K(n) = K(n/2) + 2K(n/3) + 3K(n/4) + n2n^2
문제 크기 n2n^2 -> 95/148n295/148n^2 -> ... -> cn2cn^2 비례 -> 공비가 1보다 작은 등비수열 -> n2(1+95/148+...)n^2(1 + 95/148 + ...) -> O(n2n^2)

L(n) = L(n/15) + L(n/10) + 2L(n/6) + sqrtn\\sqrt{n}
sqrtn\\sqrt{n} -> csqrtnc\\sqrt{n} -> ... -> sqrtn\\sqrt{n}에 비례 -> 공비가 1보다 큰 등비수열 -> 노드의 개수와 같음

=> tree 높이 = log_6nlog\_6 n (n/6이 더 깊이 내려감. 나머지도 걍 있다고 치고 이걸 기준으로 계산)

=> leaf: 1, 4, 4^2,... 4log_6n4^{log\_6 n} -> nlog_64n^{log\_6 4} -> O(nlog_64n^{log\_6 4})

트리가 내려갈 수록 노드합이 늘거나 줄거나 일정할 때 다름