一道题目:台上有三扇门,其中一扇门后藏有现金100万,主持人叫你选择其中一扇门后,然后主持人在余下的门中排除一个,这时问你要不要更换选择?
下面给出数学说明
不换门是很简单的古典概型
换门中奖等价于第一步要选错等价于p=2/3
同理四扇门和更一般 的n扇门结果如下:
下面提供两种算法,第一种是我做的,第二种来自网上原文链接,计算百万次.
import numpy as npimport randombatch_size=1000000print('sample:{}'.format(batch_size))A=np.zeros((batch_size,3))A[range(batch_size),np.random.choice(3,batch_size)]=1count=[]for k in A:m=list(k)e=[0,1,2]random.shuffle(e)h=e[0]t=m[h]if t==0:count.append(1)acco=len(count)/ batch_sizeprint('换个门后获胜的概率为=',round(acco,3))count=[]for k in A:m=list(k)e=[0,1,2]random.shuffle(e)h=e[0]t=m[h]if t==1:count.append(1)acc1=len(count)/ batch_sizeprint('不换门获胜的概率为=',round(acc1,3))
sample:1000000换个门后获胜的概率为= 0.666不换门获胜的概率为= 0.334
import bumpy as npbatch_size=100000print('sample:{}'.format(batch_size))A=np.zeros((batch_size,3))A[range(batch_size),np.random.choice(3,batch_size)]=1B=np.zeros((batch_size,3))B[range(batch_size),np.random.choice(3,batch_size)]=1acco=np.sum(A+B==2)/batch_sizeprint('acc0:{}'.format(acco))I=np.argmin(A+B,axis=1)C=np.zeros((batch_size,3))C[range(batch_size),I]=1F=1-(C+B)acc1=np.sum(A+F==2)/batch_sizeprint('acc1:{}'.format(acc1))
sample:100000acc0:0.33311acc1:0.66689