공부/Algorithm

마스터 정리(Master Method), Big-Oh, Theta, Omega Notation

sudo 2021. 8. 7. 22:09

시간 복잡도가 점화식으로 정의될 때, 마스터 정리를 이용해서 시간 복잡도를 계산할 수 있다. 마스터 정리와 마스터 정리의 사용 조건에 대해 간단히 정리해보자.

마스터 정리 조건

시간 복잡도 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

 

마스터 정리 (+ 확장 마스터 정리)

* 마스터 정리(Master theorem) 마스터 정리는 일반적으로 재귀적으로 호출되는 함수에 대해 시간 복잡도를 알고 싶을 때 사용합니다. 단순 for문 중첩으로는 알 수 없는 것들을 계산해야 하는 경우가

coloredrabbit.tistory.com