【发布时间】:2018-03-12 15:20:50
【问题描述】:
我在运行scala.util.Random().nextInt(3) 81 次时看到如下结果(Java 开发人员,请参阅edit 了解这如何关联):
200010202002112102222211012021020111220022001021101222222022210222220100000100010
注意大的连续块:
000、22222、111、222222、222、22222、00000、000。
直观地说,这个序列看起来并不自然/“现实世界的硬币翻转”是随机的。
例如,要实现6x 连续2s 只有0.4% 机会(AFAIK)和5x 连续值有1.2% 机会......所以我似乎不太可能继续看到输出中的模式是这样的。
这会在现实世界中用 3 面硬币发生吗?或者这是使用 Java 的 Random.nextInt(exclusiveMax) 方法时与“真正随机”的预期偏差?
编辑:
我实际上一直在使用scala.util.Random.nextInt(int),它通过new java.util.Random() 创建一个新的全局java.util.Random。
【问题讨论】:
-
我们无法为您提供我们看不到的代码。没有
Random.nextInt(int),所以问题中唯一的代码显然不是您的实际代码(nextInt是实例方法,而不是类方法)。请添加minimal reproducible example 来演示问题。最有可能的是,您正在使用相同的种子创建Random实例。请记住,如果您从相同的种子开始,Random会产生相同的序列,这就是为什么它是一个 psuedo-随机数生成器。 -
@T.J.Crowder 谢谢,已添加说明。
-
使用您的示例输出,在第一个之后的 81 个值中,47 个与前一个不同,33 个相同。这对我来说似乎非常错了。 (在一个完美的世界里,你会得到 33%。)样本量很小,这是可信的。如果你在几十万个结果之后得到相同的比例,我会更担心。
-
@JonSkeet 在您建议的测试之后,我看到 33.33% 的样本量更大。
标签: java scala random statistics