2011年5月9日星期一

甄姬洛神后摸桃子的概率

我考虑的是这样一种情况:

不包括任何扩展牌,牌堆中共104张牌,52红,52黑,红牌中有8张桃子。牌洗好
后甄姬开始洛神,直到洛神失败,然后抓两张牌。计算这种情况下甄姬至少摸到
一张桃子的概率。

首先,看白板武将至少摸到一张桃子的概率如何计算 :

先 计算白板武将一张桃子都摸不到的概率,然后用1减去它得到的就是至少摸到
一张桃子的概率。白板武将摸两张牌,相当于从104张牌中随机抽出两张牌,共有
104*103种抽法。不是桃子的牌共有96张,抽出两张不是桃子的牌,共有96*95种
抽法。所以,白板武将摸不到桃子的概率p1 = (96*95)/(104*103)。1-p1得到的
就是白板武将至少摸到一张桃子的概率。

为了给计算甄姬摸桃子的概率做铺垫,再考虑另一种计算白板武将摸桃子的概率。
还是先考虑一张桃子的摸不到的概率。

104 张牌进行排列组合,共有104的阶乘,即104!种排列方法。再看看前两张牌都
不是桃子共有多少种排列方法:先从96张不是桃子的牌中取一张放在最上面, 再
从剩下的95张不是桃子的牌中取1张放在牌库顶的第二张,再将剩下的102张牌任
意排列,共有:96*95*102!种排列方法。因此,白板武将摸不到 桃子的概率p1
= (96*95*102!)/(104!) = (96*95)/(104*103)与前一种方法的计算结果一致。

现在,我们来看甄姬洛神直到失败后,至少摸到一张桃子的概率。依然,我们还
是计算甄姬一张桃子都摸不到的概率,然后用1减去它得到甄姬至少摸到一张桃子
的概率。

104张牌进行排列组合,共有104!种排列方法。

甄姬洛神后抓牌,共有如下这么多种可能:

0 洛神到0张黑牌,即一张牌都没洛到。0.1 洛神的判定牌不是桃子从 44张不是
桃子的牌中任选一张放在牌库顶,不是桃子的牌共96张,其中有一张红的作为判
定牌放在牌库顶了,从剩下的95张中选一张放在牌库顶的第二张的位 置,再从剩
下的94张中选一张放在第三张的位置(我们现在计算的是1张桃子都摸不到的概率,
所以从不是桃子的牌中选2张给甄姬摸),1张放在了牌库顶,不 是桃子的牌中选
出了两张给甄姬摸,总共104张牌,还剩101张牌可以任意排列,共有101!种排列
方法。因此,洛神第一张就是红色,并且不是桃子共有这末多种情况:44 *
95 * 94 * 101!  0.2 洛神的判定牌是桃子与0.1的算法类似,从8张桃子中选一
张放在牌库顶,然后从96张不是桃子的牌中选1张放在牌库顶第二张,再从剩下的
95张不是桃子的牌中选一张放在牌库顶第三张,剩下的101张牌任意排列,共有这
末多种情况:8 * 96 * 95 * 101!

1 洛神到1张黑牌。从52张黑牌中选1张放到牌库顶,共有52种情况,接下来:
1.1 判定牌不是桃子从44张不是桃子的红牌中选1张放到洛神的牌后面,洛神1张
牌加上判定牌1张,还剩94张不是桃子的牌,从中选一张放在判定牌后面,再从剩
下的93张不是桃子的牌中选一张放在后面,此时包括桃子总共还剩100张牌,可以
任意排列,于是共有这末多种情况:52 * 44 * 94 * 93 * 100!  1.2 判定牌是
桃子从8张桃子中选1张放到洛神的牌后面,除去洛神的1张牌,还有95张牌不是桃
子,从中选1张放到判定牌后面,再从剩下的94张不是桃子的牌中选1张放到后面,
然后剩下的100张牌任意排列,共有这末多种情况:52 * 8 * 95 * 94 * 100!

2 洛神到2张黑牌从52张黑牌中选1张放到牌库顶,再从剩下的51张黑牌中选1张放
到牌库顶第二张,共有52*51种情况2.1 判定牌不是桃子从44张不是桃子的红牌中
选1张放到洛神的牌后面,洛神2张加上判定牌1张,还剩93张不是桃子的牌,从中
选1张放到判定牌后面,再从剩下的92张不是桃子的牌中选1张放到后面,一共还
剩99张牌,可以任意排列,共有这末多种情况:(52 * 51) * 44 * 93 * 92 *
99!  2.2 判定牌是桃子从8张桃子中选1张放到洛神的牌后面,除去洛神2张牌,
还剩94张不是桃子的牌,从中选1张放到判定牌后面,再从剩下的93张不是桃子的
牌中选1张放到后面,一共还剩99张牌,可以任意排列,共有这末多种情况:
(52 * 51) * 8 * 94 * 93 * 99!

依此类推,可以得到:

3 洛神到3张黑牌从52张牌中选3张放到牌库顶,共有52 * 51 * 50种情况3.1 判
定牌不是桃子(52 * 51 * 50) * 44 * 92 * 91 * 98!  3.2 判定牌是桃子

(52 * 51 * 50) * 8 * 93 * 92 * 98!

......

51 洛神到51张黑牌从52张牌中选51张放到牌库顶,共有52 * 51 * 50 *
...... * 2种情况51.1 判定牌不是桃子(52 * 51 * ... * 2) * 44 * 44 *
43 * 50!  51.2 判定牌是桃子(52 * 51 * ... * 2) * 8 * 45 * 44 * 50!

52 洛神到52张黑牌52.1 判定牌是桃子(52 * 51 * ... * 2 * 1) * 44 * 43 *
42 * 49!  52.2 判定牌不是桃子(52 * 51 * ... * 2 * 1) * 8 * 44 * 43 *
49!

将上面的所有情况相加,得到的就是所有洛神后摸不到桃子的情况。经计算得到,
洛神后摸不到桃子共有这末多种情况:

no_peach =
8768393644112035467653013895319007081912845854144094315049335792122609241987921866302232452367163796631068635340901979516433835590933660303360000000000000000000000000

又由于104张牌全排列共有104!种情况

因此,甄姬摸不到桃子的概率p2 = no_peach / 104!

no_peach刚好可以被102!整除,因此计算p2时分子分母同时约去102! 得到:p2
= 9120 / (104 * 103) = (96 * 95) / (104 * 103) = p1

即,甄姬洛神后摸不到桃子的概率,和白板武将摸两张牌后摸不到桃子的概率是
一样的,所以,他们至少摸到1张桃子的概率也是一样的,均为1 - (96 * 95) /
(104 * 103),约等于0.148618371919。

我把计算no_peach的值的程序放到github上了

https://github.com/yupeng820921/luoshen

calc.py

是个python写的小程序。