我知道如果我使用 Java 中的随机生成器,使用 nextInt 生成数字,数字将均匀分布。但是,如果我使用 2 个 Random 实例,用两个 Random 类生成数字,会发生什么情况。数字是否均匀分布?
最佳答案
每个 Random
实例生成的数字将均匀分布,因此如果将两个 Random
实例生成的随机数序列组合起来,它们也应该均匀分布.
请注意,即使生成的分布是均匀的,您也可能需要注意种子以避免两个生成器的输出之间存在相关性。如果您使用默认的无参数构造函数,种子应该已经不同了。来自 java.util.Random
的源代码:
private static volatile long seedUniquifier = 8682522807148012L;
public Random() { this(++seedUniquifier + System.nanoTime()); }
如果您显式设置种子(通过使用 Random(long seed)
构造函数,或调用 setSeed(long seed)
),您需要采取你自己关心这个。一种可能的方法是使用随机数生成器为所有其他生成器生成种子。
关于java - 随机均匀分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4253500/