如果一个人扔个6面骰子, 如果扔到了任一不是bad number的数,都可以得到对应数的奖金, 并且可以选择是否选择继续参加游戏, 如果不继续就可以带走手上所有的钱. 如果扔到了bad number (假设是1), 就必须交付手上现有的所有的钱并且中止游戏. 请问这个游戏的期望是多少?
2个回答
假设扔完$k$次之后,手上钱的期望为$E_k$。
显然
$$E_1=\frac{0+2+3+4+5+6}{6}=\frac{10}{3}$$
并且
$$E_{k+1}=\frac{1}{6}0+\frac{5}{6}(E_k+4)=\frac{5}{6}E_k+\frac{10}{3}$$
当$E_{k+1}=E_k$的时候,停止扔骰子,此时$E_k=20$。
SofaSofa数据科学社区DS面试题库 DS面经
非常感谢, 很intuitive.
-
lethe63
2019-02-12 03:24
Ek+4怎么来的?
-
fishinsnow
2020-07-28 13:15
4=(2+3+4+5+6)/5,也就是每步不扔1时得到奖金的期望。
-
Zealing
2020-07-29 02:44
有个Hold at 20 turn的策略,每一步期望的最大值是20,如果当前得分达到20,就要见好而收。
假设策略是一直扔骰子,求扔到1前得分的均值。
第$k$步的概率$p_k=\frac{(5/6)^{k-1}}{\sum_{k=1}^{\infty}(5/6)^{k-1}}$,分子为归一化因子。
第$k$步得分的均值是$E_{k}(score)=4k*(5/6)+0*1/6$
得分的均值
$$E(score)=\sum_{k=1}^{\infty}p_kE_k(score)$$
$$=\frac{\sum_{k=1}^{\infty}4k(5/6)^k}{\sum_{k=1}^{\infty}(5/6)^{k-1}}$$
$$=120/6$$
$$=20$$
用MC验证:
import numpy as np
n=10000
score=np.zeros(n)
step=np.zeros(n)
for i in range(n):
x=np.random.randint(low=1,high=7)
while x>1:
score[i]+=x
step[i]+=1
x=np.random.randint(low=1,high=7)
print("E(score)=%f"%score.mean())
print("E(step)=%f"%step.mean())
结果是
E(score)=19.878700
E(step)=4.978100
SofaSofa数据科学社区DS面试题库 DS面经
谢谢, 非常清楚. 所以hold at 20 turn这个策略就是根据期望值是20这个结果的得出的结论是吗?
-
lethe63
2019-02-12 03:24