随机均匀分布

我知道如果我使用Java的Random生成器,使用nextInt生成数字,数字将是均匀分布的。 但是如果我使用2个Random实例会发生什么,用两个Random类生成数字。 这些数字是否均匀分布?

好吧,如果你为具有相同值的两个Random实例播种,你绝对不会得到高质量的离散均匀分布。 考虑最基本的情况,从字面上打印两次完全相同的数字(不比随机数少得多):

 public class RngTest2 { public static void main(String[] args) throws Exception { long currentTime = System.currentTimeMillis(); Random r1 = new Random(currentTime); Random r2 = new Random(currentTime); System.out.println(r1.nextInt()); System.out.println(r2.nextInt()); } } 

但那只是一次迭代。 如果我们开始增加样本量会发生什么?

以下是并排运行两个相同种子的RNG以生成2000个数字的分布的散点图:

替代文字

以下是运行单个RNG以分别生成2000个数字的分布:

替代文字

似乎很清楚哪种方法在该有限集上产生了更高质量的离散均匀分布。

现在几乎每个人都知道,如果你正在寻找高质量的随机性,那么用相同的种子播种两个RNG是一个坏主意。 但是这种情况确实让你停下来思考:我们已经创建了一个场景,其中每个RNG独立地发出相当高质量的随机性,但是当它们的输出结合时,它的质量显着降低(不太离散)。