《编程之美》4.11:挖地雷游戏的概率
转自:http://blog.sina.com.cn/s/blog_71145bba0100mdmh.html
在16*16的地雷阵中,有40个地雷,点击了2下后,出现如下的局面(图1):
分析图中的局部(图2),
问题1:当游戏中有40个雷没有被发现的时候,A、B、C三个地方有雷的概率P(A), P(B), p(C)各是多少?
问题2:这个游戏局面共有16×16=256个方块,P(A), P(B), P(C)的相互大小关系和当前局面中地雷的总数有什么关系?比如
:地雷的总数从10个到240个,P(A), P(B), P(C)的三条曲线是如何变化的?是否会相交?
分析与解答:
1、从局部的5×3个格来看,可能的情况有两种:
第一种:B片区(黄框的3个格)有1个雷,A片区(红框的5格)有0个雷,C片区(蓝框的5格)有1个雷。
对应的概率:P(A) = 0, P(B) = 1/3, P(C) = 1/5
第二种:B片区有0个雷,A片区有1个雷,C片区有2个雷。
对应的概率:P(A) = 1/5, P(B) = 0, P(C) = 2/5
以上的两种情形记为M2,M3,对应的A、B、C有雷的概率记为:
P(A2) = 0,
P(B2) = 1/3, P(B3) = 0;
P(C2) = 1/5, P(C3) = 2/5;
2、考察剩余雷数与情形M2,M3的关系
将地雷总数记为T,方格总数记为G,则每个方格有雷的概率Pg=T/G,相应的没有雷的概率为1-Pg,因为讨论的是16×16的雷区
,因此G=256,对于问题1,T=40,对于问题2,T属于[10, 240]
在16*16大小的雷区出现情形M2或者M3的概率记作P(M2), P(M3),考虑情形M2和M3的所有可能(Comb表示组合),
则有(参考图3)
P(M2) = (1-Pg)^5 * Pg*(1-Pg)^2*Comb(3,1) * Pg*(1-Pg)^4*Comb(5,1) * (1-Pg)^2//我认为这里应该不用乘1格和2格没有雷的概率
P(M3) = Pg*(1-Pg)^4*Comb(5,1) * (1-Pg)^3 * Pg^2*(1-Pg)^3*Comb(5,2) * (1-Pg)^2//我认为这里应该不用乘1格和2格没有雷的概率
将T=40或者T属于[10, 240]带入即可计算出P(M2)和P(M3)
3、P(A), P(B), P(C)与P(M2), P(M3)的关系
因为讨论P(A), P(B), P(C)的前提是M2,M3的局面已经出现,所以影响P(A), P(B), P(C)大小的并不是P(M2)和P(M3)的绝对值
,而是它们出现的相对比例关系,表示如下:
P(A) = P(M2)*P(A2)/(P(M2) + P(M3)) + P(M3)*P(A3)/(P(M2) + P(M3));
P(B) = P(M2)*P(B2)/(P(M2) + P(M3)) + P(M3)*P(B3)/(P(M2) + P(M3));
P(C) = P(M2)*P(C2)/(P(M2) + P(M3)) + P(M3)*P(C3)/(P(M2) + P(M3));
将P(A), P(B), P(C)表示为Pg的函数:
P(A) = 2*Pg/(3+7*Pg);
P(B) = (1-Pg)/(3+7*Pg);
P(C) = (3.4*Pg + 0.6)/(3+7*Pg);
T = 40, P(A) = 7.63%, P(B) = 20.61%, P(C) = 27.63%
4、当地雷总数从10逐渐变化到240,P(A), P(B), P(C)三条曲线如图4所示(图中对XY坐标进行了适当的放大)
虽然图中三条曲线是相交的,但是严格来说,因为地雷的总数是整数,而概率是浮点数,如果取足够的精度,P(A), P(B), P
(C)三条曲线是不连续的,并且三者没有交点。