본문으로 건너뛰기
김신건의 로그

마스터 정리 (Master Theorem)

· 수정 · 📖 약 3분 · 872자/단어 #algorithm #math #recurrence #complexity #divide-conquer
Master Theorem, 마스터 정리, recurrence-master-theorem, divide and conquer recurrence, 분할 정복 점화식, Akra-Bazzi

정의

마스터 정리 (Master Theorem) 는 분할 정복 알고리즘의 시간 복잡도를 표현하는 점화식을 닫힌 형태 (closed form) 로 풀어주는 공식입니다.

적용 대상: 다음 형태의 점화식

  • : 하위 문제 수
  • : 크기 축소 비율
  • : 분할/병합 비용

한 줄 요약: “분할 정복 알고리즘의 를 빠르게 판정”.

세 경우

임계 지수:

의 상대적 크기로 세 경우:

Case 1: (분할 비용이 작음)

의미: 재귀 트리의 잎 노드가 지배. 각 레벨에서 아래로 갈수록 일 커짐.

:

  • ,
  • → Case 1

Case 2: (균형)

의미: 각 레벨의 일이 같음. 레벨 수 배.

: (병합 정렬)

  • ,
  • Case 2

Case 3: (분할 비용이 큼)

+ regularity 조건 ():

의미: 재귀 트리의 루트 (최상위 호출) 가 지배.

:

  • ,
  • → Case 3
  • Regularity:

시각화: 재귀 트리

Level 0:                    n                    총 = n
                          /   \
Level 1:              n/2     n/2                총 = n
                     /   \   /   \
Level 2:          n/4  n/4 n/4 n/4               총 = n
                     ...
Level log n:       1 1 1 ... 1 (n 개)            총 = n

전체 = n * log n

개 레벨, 각 레벨 .

알고리즘 적용 예시

알고리즘점화식결과Case
이진 탐색2
병합 정렬2
퀵 정렬 (평균)2
카라추바 곱셈1
Strassen 행렬곱1
이분 탐색 트리3
Closest Pair (2D)2

계산 절차

  1. , , 식별
  2. 계산
  3. 와 비교
  4. Case 판정 → 결과

예제:

  • , ,
  • vs : 이 큼 (polynomially larger, 팩터)
  • Case 3
  • Regularity: for some

판정 흐름도

flowchart TD
    A["T(n) = aT(n/b) + f(n)"] --> B["c = log_b(a) 계산"]
    B --> C{"f(n) 대 n^c 비교"}
    C -->|"f(n) poly smaller"| D["Case 1: Theta(n^c)"]
    C -->|"f(n) same order"| E["Case 2: Theta(n^c log n)"]
    C -->|"f(n) poly larger"| F{"Regularity 성립?"}
    F -->|"Yes"| G["Case 3: Theta(f(n))"]
    F -->|"No"| H["마스터 정리 적용 불가"]

Case 사이 gap

모든 경우가 마스터 정리로 안 풀림. 두 gap:

Gap 1-2:

보다 약간 작음, 하지만 polynomially not smaller. 마스터 정리 적용 X.

Gap 2-3:

보다 큼, 하지만 polynomially not larger.

확장 마스터 정리 (Case 2 확장):

:

Akra-Bazzi 방법

일반화된 마스터 정리. 다음 형태 처리:

  • 여러 분할 크기 ()
  • 마스터 정리보다 광범

:

수학적 배경 (integral) 필요. 대회에는 잘 안 나옴.

마스터 정리 로 안 되는 예

1. 감소 (subtraction) 점화식

직접 풀기 (반복 대입 또는 트리).

2. 불규칙 크기

→ 변수 치환

3. 로그 팩터

→ 마스터 정리 gap. 다른 방법.

실전 팁

  • 분할 정복 알고리즘 설계 후 즉시 확인
  • 재귀 트리 시각화 로 직관
  • 암기하지 말고 유도
  • Regularity 조건 잊지 말 것 (Case 3)

함정

WARNING

Case 3 regularity 확인 필수. 안 성립하면 마스터 정리 못 씀.

CAUTION

를 잘못 계산. 이지 아님.

WARNING

은 감소 형태. 마스터 정리 대상 아님 ().

IMPORTANT

재귀 트리로 확인. 마스터 정리 결과가 이해 안 되면 직접 그려보자.

CAUTION

Polynomial difference 필수. 와 다항적으로 (not just log) 커야 Case 1/3.

구현: 케이스 판정기

교육용 Python 스크립트. a, b, f 의 지수를 입력하면 케이스를 판정.

Python
import math

def master_theorem(a, b, f_alpha, f_log_beta=0):
  """
  T(n) = a T(n/b) + n^f_alpha * log^f_log_beta(n) 케이스 판정.
  a: 하위 문제 수, b: 크기 축소 비율
  f_alpha: f(n) 의 n 지수, f_log_beta: log 지수 (기본 0)
  """
  c = math.log(a) / math.log(b)
  eps = 1e-9
  if f_alpha < c - eps:
      return f"Case 1: T(n) = Theta(n^{c:.4g})"
  elif abs(f_alpha - c) < eps:
      k = f_log_beta + 1
      if k > eps:
          return f"Case 2: T(n) = Theta(n^{c:.4g} log^{k:.4g} n)"
      else:
          return "Gap: 마스터 정리 직접 적용 불가"
  else:
      return f"Case 3: T(n) = Theta(f(n))  [c={c:.4g}, regularity 확인]"

# 병합 정렬: T(n) = 2T(n/2) + n
print(master_theorem(2, 2, 1))
# 이진 탐색: T(n) = T(n/2) + 1
print(master_theorem(1, 2, 0))
# 카라추바: T(n) = 3T(n/2) + n
print(master_theorem(3, 2, 1))
# Strassen: T(n) = 7T(n/2) + n^2
print(master_theorem(7, 2, 2))
# 확장 Case 2: T(n) = 2T(n/2) + n log n
print(master_theorem(2, 2, 1, 1))
결과
Case 2: T(n) = Theta(n^1 log^1 n)
Case 2: T(n) = Theta(n^0 log^1 n)
Case 1: T(n) = Theta(n^1.585)
Case 1: T(n) = Theta(n^2.807)
Case 2: T(n) = Theta(n^1 log^2 n)

관련 위키

이 글의 용어 (5개)
시간 복잡도 (Time Complexity)algorithm
정의 시간 복잡도 (Time Complexity) 는 입력 크기 N 이 증가할 때 알고리즘의 연산 횟수 증가율 을 나타낸다. PS 에서는 주로 최악 케이스 Big-O 표기법 을 …
이산수학 (Discrete Mathematics)discrete-math
정의 이산수학 (Discrete Mathematics) 은 이산 (discrete, 셀 수 있는) 대상을 다루는 수학의 분야입니다. 연속 (continuous) 대상 을 다루는 …
점화식 (Recurrence Relations)discrete-math
정의 점화식 (Recurrence Relation) 은 수열 $(an)$ 의 $n$ 번째 항을 앞선 항 (또는 몇 개) 로 표현하는 관계식입니다. 초기 조건 과 점화식이 함께 있…
증명 기법 (Proof Techniques)discrete-math
정의 증명 (proof) 은 명제가 참임을 논리적으로 확립하는 절차입니다. 컴퓨터 과학에서는 알고리즘 정확성, 자료구조 불변식, 암호 안전성, 형식 검증 등에 필수. 이 문서는 …
Generating Functionalgorithm
정의 Generating Function (생성 함수) 은 수열 를 형식 멱급수 (formal power series) 으로 인코딩한 것. 수열의 산수 를 다항식 / 멱급수의 대…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기