1부터 6까지 6면 주사위를 1번 던져 나온 눈의 수만큼 사탕을 받는다고 하자.
사탕을 적어도 n개 이상 받기 위해 던져야하는 횟수의 기댓값은?
n = 1이면 1번만 던져도 사탕을 1개 이상 받으므로 1번
--------------------------------------------------------------------------------------------------------------------------------------
통계적?으로 접근할려고하면 굉장히 어렵다
확률변수 X를 먼저 정의하고
X = 사탕을 n개 이상 받기 위해 던져야하는 횟수
P(X = 1), P(X = 2), ...을 구한다음 xP(X = x)의 합을 구하면 될텐데
문제는 P(X = 1) 이런건 어떻게 구하냐 이거지
예를 들어 n = 1이면 P(X = 1)은 얼마임? 100%인가? 그러면 P(X = 2)는??
하루종일 고민했는데 모르겠더라고
다이나믹 프로그래밍으로 직관적으로 푸는게 있는데
합이 N이상이 되기 위해 던져야하는 횟수의 기댓값을 DP[N]으로 정의하면
DP[N] = 1 + (DP[N-1] + DP[N-2] + ... + DP[N-6])/6이다
N-1, N-2,...,N-6에서 주사위 1번을 던져야 N이 될 것이고 각각은 1/6의 확률로 등장하기 때문이라는데
직관적으로 맞긴한데
통계학과 자존심에 왜 되는지 고민해봤는데 합리적인 대답을 찾았다
'The Law of total expectation'이라는 법칙이 있다
E(X) = E(E(X|Y))
이 식은 바꿔쓰면 다음과 같다
E(X|Y = y)는 Y = y에 대한 확률변수이므로 E(E(X|Y=y))=∑yP(Y=y)E(X|Y=y)=E(X)
X가 합이 적어도 N에 도달하기 위해 던져야하는 횟수라고 하자
주사위를 1번 던지는 사건 Y = y라고 정의하면 X | Y = y는 1번 던졌더니 주사위의 눈이 y일때 N에 도달하기 위한 횟수이므로
1 + (N - y에 도달하기 위한 횟수)와 같으니 E(X)=∑6yP(Y=y)E(X|Y=y)에서
E(X)는 합이 적어도 N이상이기 위해 던져야하는 횟수 DP[N]
E(X|Y = y)는 합이 적어도 N - y이상이기 위해 던져야하는 횟수 DP[N-y]
P(Y = y) = 1/6이므로
DP[N]=∑6y1/6∗(1+DP[N−y])=1/6∗(6+DP[N−1]+DP[N−2]+...+DP[N−6])
따라서
DP[N]=1+(DP[N−1]+...+DP[N−6])/6
n = int(input())
E = [0]*(n+1)
for i in range(1,n+1):
v = 0
for j in range(1,7):
if i-j >= 0:
v += E[i-j]
E[i] = 1 + v/6
print(E[n])
'알고리즘 > 확률론 알고리즘' 카테고리의 다른 글
모든 부분집합 원소의 곱의 합을 구하는 공식이 있다고? (0) | 2023.08.20 |
---|---|
확률론 - 5000!개의 거리의 합의 평균을 구하는 방법 (0) | 2023.06.03 |