假设赌场拥有无限资金,赌场里面有一台抛硬币机供赌徒赌博,如果抛硬币机抛到了正面,那么赌徒赢,否则赌场赢。赌场为了防止一次性被赌徒全部赢光所有资产,限制每次赌博的金额为一元。
问题:假设赌徒只有一元钱,赌徒能进行 N 次赌博的概率为多少?
分析:
根据上述问题,我画了一个图,如下所示:
设赌徒用 x 元开始和赌场对赌,能玩到第 y 次还能继续玩下去的可能次数为 f(x, y),对应的概率为 P(x, y)。那么我们可以得到如下公式:
f(x, y) = f(x - 1, y -1) + f(x + 1, y - 1)
P(x, y) = f(x, y) / (2 ^ x)
找到了计算公式,便可以根据计算公式编写代码进行计算了,问题解决。代码如下:
final int count = 1000;
BigDecimal[][] table = new BigDecimal[count][count];
for (int i = 0; i < count; i++) {
table[0][i] = BigDecimal.ONE;
table[i][0] = BigDecimal.ZERO;
}
for (int i = 1; i < count; i++) {
for (int j = 1; j < count - i; j++) {
BigDecimal num = table[i - 1][j - 1].add(table[i - 1][j + 1]);
table[i][j] = num;
}
}
for (int i = 1; i < count - 1; i++) {
System.out.println(table[i][1].divide(BigDecimal.valueOf(Math.pow(2, i)), 5, BigDecimal.ROUND_HALF_DOWN));
}
最终,我模拟到了1000 次对赌的概率,为了方便展示,我把这些数据贴到了 Excel 表格制作了一张折线图。如下所示:
结论:
根据上图所示,我们能够十分直观的看到,随着赌博次数的增加,赌徒能继续玩下去的概率是趋向 0 % 的(代码最多模拟到了 1000 次,概率为 2.5%。因为第 N 次对赌可能结果呈现指数级增长,在 1024 次的时候,其数值超出了 double 的最大范围,使用 double 实在无法模拟下去了。)。
所以我们可以得出一个结论,如果赌场拥有无限资金,随着赌博次数的增加,赌徒还能继续玩下去的概率趋向 0%。换句话说,赌徒战胜赌场的概率几乎为 0%,赌徒输给赌场的概率几乎 100%。
如果有错误,欢迎指正!