Expected Value: 기댓값, Linearity
정의
확률변수 X 의 기댓값:
기댓값은 “평균적으로 기대되는 값”. 랜덤 알고리즘 분석, 확률 DP 문제에서 핵심 도구.
문제 상황
복잡한 확률 공간에서 랜덤 변수의 기댓값을 구해야 할 때, 직접 계산하면 경우의 수가 폭발적으로 늘어난다.
예시: n 개 원소의 랜덤 순열에서 고정점 (자기 자리에 오는 원소, fixed point) 의 평균 개수?
순진한 접근: 고정점이 정확히 k 개인 경우를 모두 열거. 포함-배제 원리 필요. 복잡함.
핵심 아이디어: 지시 변수 (indicator variable) 로 분해 + Linearity of Expectation 적용.
시각화
flowchart LR
R["랜덤 변수 X 계산"] -->|"직접 계산"| D["경우의 수 폭발"]
R -->|"분해 접근"| L["지시 변수 Xi 합으로 표현"]
L --> Ei["각 E_Xi 개별 계산"]
Ei --> S["Linearity 적용해 합산"]
style D fill:#f9a825,color:#000
style S fill:#2e7d32,color:#fff
핵심 아이디어
Linearity of Expectation
독립 여부 무관. X, Y 가 상관관계가 있어도 성립한다.
이것이 핵심: 복잡한 합 확률 변수를 단순한 지시 변수들의 합으로 분해 가능.
지시 변수
지시 변수 :
X_i = \begin\{cases\} 1 & \text{이벤트 } i \text{ 발생} \\ 0 & \text{아닐 때} \end\{cases\}분해 패턴
- 원하는 값 X 를 지시 변수 합으로 표현:
- Linearity 적용:
- 각 를 개별 계산
각 는 원래 문제보다 훨씬 단순한 경우가 많다.
알고리즘
예시 1: Fixed Points in Random Permutation
n 개의 원소를 랜덤 순열 배치, 고정점 개수의 기댓값?
- : i번째 원소가 고정점이면 1, 아니면 0
- (n 자리 중 자기 자리에 올 확률)
- Linearity 적용:
랜덤 순열의 고정점 기댓값 = 1 (n 에 무관).
예시 2: Coupon Collector
n 종류 쿠폰, 매번 1개 랜덤 수집. 전 종류 모으려면 평균 몇 번?
- k-1 종류 보유 중, 새 쿠폰 확률 =
- k 번째 새 쿠폰 수집에 필요한 시도 횟수 기댓값:
여기서 는 조화급수.
예시 3: Quicksort 평균 비교 횟수
임의 pivot 선택 quicksort 의 평균 비교 횟수.
: 원소 i 와 j 가 비교되면 1, 아니면 0 ().
(i..j 범위에서 i 또는 j 가 먼저 pivot 으로 선택될 확률).
구현
import random
def count_fixed_points(perm):
return sum(1 for i, x in enumerate(perm) if i == x)
def coupon_steps(n, trials=50000):
total = 0
for _ in range(trials):
collected = set()
steps = 0
while len(collected) < n:
collected.add(random.randint(0, n - 1))
steps += 1
total += steps
return total / trials
# 고정점 기댓값 = 1 검증
n = 8
trials = 50000
random.seed(42)
fp_total = 0
for _ in range(trials):
perm = list(range(n))
random.shuffle(perm)
fp_total += count_fixed_points(perm)
print("Fixed points E =", round(fp_total / trials, 3)) # ~1.0
# Coupon Collector E[T] ~ n * H_n
n_c = 5
sim = coupon_steps(n_c)
theory = n_c * sum(1.0 / (n_c - k + 1) for k in range(1, n_c + 1))
print("Coupon n=5 sim=", round(sim, 2), "theory=", round(theory, 2))Fixed points E = 1.000
Coupon n=5 sim=11.41 theory=11.42복잡도
기댓값 계산은 분석 도구이지, 알고리즘 자체가 아님. 실제 알고리즘 복잡도에 자주 등장하는 공식:
| 문제 유형 | 기댓값 공식 | 비고 |
|---|---|---|
| Fixed points in permutation | n 무관 | |
| Coupon Collector | 조화급수 | |
| Quicksort 평균 비교 횟수 | Linearity 분해 | |
| Randomized Select | expected | - |
| 기하 분포 성공까지 횟수 | p: 성공 확률 | |
| Randomized Primality | k: 반복 횟수 |
함정
WARNING
비선형 함수에는 Linearity 없음: . 일반적으로 (Jensen’s inequality).
WARNING
곱셈: 는 독립일 때만 성립. 상관 있으면 공분산 항 추가됨.
CAUTION
기댓값이 발산할 수 있다. St. Petersburg paradox: 무한 기댓값. 무한 합 수렴 여부를 반드시 확인.
흔한 실수
- 를 독립 확인 없이 적용
- 조건부 기댓값 와 혼동
- 지시 변수로 분해 시 이벤트 겹침 (overlap) 고려 안 함
- 연속 분포에서 합산을 적분으로 바꾸지 않음
BOJ 연습 문제
| 번호 | 제목 | 키워드 |
|---|---|---|
| BOJ 11590 | 기댓값 | 기댓값 직접 계산 |
| BOJ 14788 | 슬라임 연구자 | 기댓값 DP |
| BOJ 2062 | 돌멩이 제거 | 기댓값 + 확률 |
| BOJ 17404 | RGB 거리 2 | 확률 응용 |
| BOJ 15810 | 풍선 공장 | 이분 탐색 + 기댓값 |
참고
이 글의 용어 (5개)
- 베이즈 정리 (Bayes Theorem)algorithm
- 정의 베이즈 정리 (Bayes Theorem) 는 조건부 확률의 대칭성을 이용해 P(A|B) 를 P(B|A) 로 표현하는 공식: - P(A): 사전 확률 (prior) - 증거를…
- 확률 (Probability)algorithm
- 정의 확률 (Probability) 은 사건이 발생할 가능성을 수치화한 값. 표본 공간 Ω 에 대해 P(A) = |A| / |Ω| (동일 확률), 또는 더 일반적으로는 σ-alg…
- Birthday Problem (생일 문제)algorithm
- 정의 생일 문제 (Birthday Problem) 는 N 개의 동등한 가능성이 있는 결과에서 무작위로 k 개를 선택할 때 적어도 하나의 충돌이 발생할 확률을 분석하는 문제. 충돌…
- Markov Chain: 상태 전이 확률algorithm
- 정의 Markov Chain 은 다음 상태가 오직 현재 상태에만 의존하는 확률 과정. Memoryless property (Markov property). $$ P(X{t+1} …
- Randomization (무작위화)algorithm
- 정의 무작위화 (Randomization) 는 알고리즘 내부에 난수를 도입하여 평균 성능 향상 또는 결정론적 방법보다 단순한 해결책 을 얻는 기법. 크게 두 부류로 나뉜다: - …
💬 댓글