返回题库

最高点数期望

Highest Roll EV

专题
Probability / 概率
难度
L5

题目详情

Jim 将掷出一个公平的六面骰子,直到获得 44。他在这个过程中滚动到的最高数字的预期值是多少?

Jim will roll a fair, six-sided die until he gets a 44. What is the expected value of the highest number he rolls through this process?

解析

因为 Jim 会在第一次掷出 44 时停止,所以他在整个过程中掷到的最大值 HH 只可能是 4,5,64,5,6

1) H=4\textbf{1) }H=4:等价于在第一次出现 44 之前从未掷出 5566。 只看掷骰序列中落在集合 {4,5,6}\{4,5,6\} 的那些次序(忽略 1,2,31,2,3),第一次出现的值在 4,5,64,5,6 之间对称且等可能,因此

Pr(H=4)=13.\Pr(H=4)=\frac{1}{3}.

2) H=6\textbf{2) }H=6:等价于在第一次出现 44 之前先出现了 66。 只看集合 {4,6}\{4,6\} 的首次出现,4466 对称且等可能,所以

Pr(H=6)=12.\Pr(H=6)=\frac{1}{2}.

3) H=5\textbf{3) }H=5:只能是剩余概率

Pr(H=5)=11312=16.\Pr(H=5)=1-\frac{1}{3}-\frac{1}{2}=\frac{1}{6}.

因此

E[H]=413+516+612=316.\mathbb{E}[H]=4\cdot\frac{1}{3}+5\cdot\frac{1}{6}+6\cdot\frac{1}{2}=\boxed{\frac{31}{6}}.
import random

roll_dice = lambda: random.randint(1, 6)

results = []
num_iters = 10_000

for _ in range(num_iters):
    highest = 0
    while True:
        roll = roll_dice()
        highest = max(highest, roll)
        if roll == 4:
            break
    results.append(highest)

print(sum(results) / num_iters)

Original Explanation

Because Jim stops when he first rolls a 44, the possible values of the highest roll are 44, 55, and 66. Let HH be the highest value rolled.

Case 1: H=4.\textbf{Case 1: }H=4. This happens exactly when Jim never rolls a 55 or 66 before the first 44. Consider only the subsequence of rolls that are in {4,5,6}\{4,5,6\}. The first such value is equally likely to be 44, 55, or 66, so

Pr(H=4)=13.\Pr(H=4)=\frac{1}{3}.

Case 2: H=6.\textbf{Case 2: }H=6. This happens exactly when Jim rolls a 66 before the first 44. Looking only at the values {4,6}\{4,6\}, the first one to appear is equally likely to be 44 or 66, hence

Pr(H=6)=12.\Pr(H=6)=\frac{1}{2}.

Case 3: H=5.\textbf{Case 3: }H=5. This is the remaining probability:

Pr(H=5)=11312=16.\Pr(H=5)=1-\frac{1}{3}-\frac{1}{2}=\frac{1}{6}.

Therefore,

E[H]=413+516+612=316.\mathbb{E}[H]=4\cdot\frac{1}{3}+5\cdot\frac{1}{6}+6\cdot\frac{1}{2}=\boxed{\frac{31}{6}}.
import random

roll_dice = lambda: random.randint(1, 6)

results = []
num_iters = 10_000

for _ in range(num_iters):
    highest = 0
    while True:
        roll = roll_dice()
        highest = max(highest, roll)
        if roll == 4:
            break
    results.append(highest)

print(sum(results) / num_iters)