春节与孩子抽王八 -- Python计算概率(理论证明)

1. 引言

前面那篇博客《春节与孩子抽王八 -- 优雅的Python》中我用Python模拟了10万次抽王八,验证了实际中观察出来的结果:手里剩牌的张数经常是6~8。

今天用理论推导一下。

2. 思考

这个问题我们很难列出全集(样本空间),因为所有可能的情况(样本点)太多了!

那么我们先把问题往简单方向想想:

1. 小王是我们固定的王八(又名老鳖),它要么归我要么归我女儿,各有1/2概率得到它。暂时把它排出去。

2. 除去小王,还有52张牌要分,一共13个点数,情况很多,怎么办呢?先考虑考虑Ace(A)吧。

A有四张,那么在全集中各得到0、1、2、3、4张的概率是多少?

上面这不就是超几何分布问题吗?以下定义来自百度。

现在我们的问题变成了:有52张牌(N=52) ,包含4个次品A(M=4),从中抽取26张(n=26),  抽到k张A的概率是多少???

P(X = k) = \frac{​{\binom{4}{k} \binom{52 - 4}{26 - k}}}{​{\binom{52}{26}}}

借助这个例子说说超几何分布公式的意义,分母是从52张牌中抽26张牌有多少种样本,分子是抽中k个次品的样本总数:分为两部分,从4个次品中抽k个有多少种情况,及从剩下的部分抽26-k非次品, 这样便凑足了26个,两者相乘即抽中k个次品的样本总数。

我们也不需要亲自去算,交给Python即可:

from scipy.stats import hypergeom

N = 52
M = 4
n = 26

# Probabilities of drawing A
for k in range(5):
    prob = hypergeom.pmf(k, N, M, n)
    print(f"P(X={k}) = {prob:.4f}")

[mzhai /tmp]$ python test.py
P(X=0) = 0.0599
P(X=1) = 0.2597
P(X=2) = 0.3896
P(X=3) = 0.2397
P(X=4) = 0.0511

 我们只关心一张A或三张A的情况(出对后手里会剩一张A),P(X=1|3) = 0.2597 + 0.2397 = 0.4994 = 49.94%,也就是全集中有尽一半的case会剩一张A。同样2、3、直到K也都有大概一半的可能性剩一张。所以13个点数最有可能剩13/2=6.5张牌。 

最后小王有一半的概率分给我,所有最有可能我手里有6.5+0.5=7张牌(当然实际我分26张牌的话最后肯定是偶数张牌,不可能剩7张。)

如果你非要计算每种情况的概率,可以用二项分布

1. 对每个4张点数,你分到奇数张的概率为49.94%

2. 总共有13个4张点数,分到奇数张的数量X服从二项分布B(13,0.4994)。

from scipy.stats import binom

n = 13 
p = 0.4994  

for k in range(14):
    prob = binom.pmf(k, n, p)
    print(f"P(X={k}) = {prob:.4f}")

P(X=0) = 0.0001
P(X=1) = 0.0016
P(X=2) = 0.0096
P(X=3) = 0.0352
P(X=4) = 0.0878
P(X=5) = 0.1577
P(X=6) = 0.2097
P(X=7) = 0.2092
P(X=8) = 0.1565
P(X=9) = 0.0868
P(X=10) = 0.0346
P(X=11) = 0.0094
P(X=12) = 0.0016

P(X=13) = 0.0001

3. 进阶 - 抽x张牌

我们还可以进阶一下:看看抽6张牌。

模拟结果:

 0 cards remained: 301 occurrences
2 cards remained: 12243 occurrences
4 cards remained: 51334 occurrences
6 cards remained: 36122 occurrences

理论值: 

P(X=0) = 0.6028
P(X=1) = 0.3364
P(X=2) = 0.0573
P(X=3) = 0.0034
P(X=4) = 0.0001

 P(X=1|3)*13+0.5=(0.3364+0.0034)*13+0.5 = 4.9

Have fun!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深山老宅

鸡蛋不错的话,要不要激励下母鸡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值