问题描述
三门问题是一道经典的概率问题。
在一个电视节目中,有主持人和三个盒子,其中只有一个盒子里面有球,并且主持人是知道哪个盒子里面有球的,你的目标是拿到有球的那个盒子。游戏规则如下:
- 你首先选择一个盒子
- 主持人从剩余的两个盒子里面去掉没有球的一个盒子。
- 这时候你可以放弃自己最初的选择,换成另一个盒子。
问,你换还是不换?
答案
要换,换了之后中奖的概率会提高一点。
程序解释
N = 3
def generate():
a = [0] * N
a[np.random.randint(0, N)] = 1
return a
def one():
# 生成一个随机问题,返回不换门中奖的概率
a = generate()
# 让用户从中选择一个
ind = np.random.randint(0, len(a))
# 主持人随机推开一个空门
empty = []
for i, v in enumerate(a):
if i == ind:
continue
elif v == 0:
empty.append(i)
# 主持人推开的门的下标
rm = empty[np.random.randint(0, len(empty))]
# 场上剩余的门
left = [v for i, v in enumerate(a) if i != rm and i != ind]
# 换门
change = np.random.randint(0, len(left))
return left[change]
def main():
s = 0
n = 100000
for i in tqdm(range(n)):
s += one()
print('如果换门中奖的概率为', s / n)
main()
数学解释
下面我们推广到n个盒子,只有一个盒子有球。
如果不换,中奖的概率为1/n。
如果换了,中奖的概率需要分类讨论:
- 最初的选择是正确的(1/n的概率),那么你再换,中奖的概率为0
- 最初的选择是错误的,概率为(n-1)/n,那么你再换,中奖的概率为1/(n-2)
如果换了,中奖的总概率为