如何用概率计算大乐透?
首先,这个问题提得很好;其次,这个答案恐怕很难得到完美的解…… 我们先考虑最极端的情况:如果知道所有的历史开奖号码,那么只要列出所有可能的中奖号码,再根据这些号码是否与历史开奖号码重合,就能得出每一注号码中奖的概率。这是最简单的情形了——甚至都不需要求解方程组!
但问题在于,我们永远不可能知道“所有的历史开奖号码”,至少不是一个完备的数据集。因为体彩中心的摇奖机一旦启动,就没有人能完全记录它所有的旋转方式(更不要说排列三的摇奖机器只有3台,且已经使用多年)。因此我们只能寻求一种近似的方法来估算每注号码的中奖概率。 常用的方法有二值化方法和方差方法。
1、二值化方法 二值化方法是假设每个开奖号码都是一个二值的随机变量,即假设每个开奖号码是0-1之间的一个数: 然后按照如下方法将前n期开出的一切号码集合在一起,构成2^n个样本点: 最后将这些样本点的数值相加,就能求得每一个号码出现次数的近似值。通过重复上述过程,最后便可估计出每一注号码的出现频率。 由于在二值空间中任意两个数做异或运算总是等于0,所以上述过程实际上将连续的概率分布区间压缩到了 2^{n} 个结点上,进而让求解方程组的问题变成了求和与迭代的问题。其误差主要取决于选定的 n 值。当 n 较大时,误差会较小。但过大的 n 值会增加计算量。另外,这种方法对异常值比较敏感。如果一个号码连续开出了几次,那么在下一次这个号码大概率会开出其对应的中奖数,这种情况会被二值化方法显著放大。
2、方差方法 方差方法的思路比二值化方法要复杂一些。其基本的思想是将每一个号码看作是一个随机变量的函数。假设我们已确定了前 n 期的开奖号码,记为 \{x_1,...,x_n\} 。对于任意的 m (1≤m≤n),定义随机变量 \[X_m=\]{number}(第 m+1 期开的号码)。于是我们就可以把每期开的号码用一组随机数表示出来。这样每期开的号码就都变成了一组在固定参数下生成的随机数序列。
由于 \(X_{m}\) 是一个随机变量,我们就不能像二值化方法那样直接求出它的出现次数。我们只能求出它在 \([0,1)\) 上出现的概率,然后求出其期望值,进而算出每一注号码出现一次的概率。这样,虽然我们无法直接获得每一注号码中的任何一个数字出现的可能,但我们可以通过求解微分方程组的方式,求出它们的联合概率分布。最后,我们可以通过枚举的方法得到每一注号码的所有可能的形式,并可以进一步求出它们各自的中奖概率。 这个方法需要解决的问题是如何确定 \(X_{m}\) 的分布。这个问题其实就是在问:如何描述前 n 期开奖号码的统计特点。最简单的方法就是把前 n 期开奖号码当作是大数定律下的一个随机过程,直接用 \(\mathcal{N}\) 或者 \(\mathcal{U}\) 来建模。这里 \(\mathcal{N}\) 和 \(\mathcal{U}\) 分别表示正态分布和均匀分布。当然,我们也可以采用其它的更复杂的模型。反正原则就是尽量简单,使计算量最低。