【问题标题】:Does the difference between random seeds matter?随机种子之间的区别重要吗?
【发布时间】:2016-01-20 19:25:21
【问题描述】:

这个:

new java.util.Random(/* random seed */ 0)
new java.util.Random(/* random seed */ 1)

以某种方式导致比这“更少随机”/“更相似”的随机生成器?

new java.util.Random(/* random seed */ 0)
new java.util.Random(/* random seed */ 1000)

换句话说:如果它们的随机种子相似,我是否会冒险从随机生成器中获得相似的整数系列?

【问题讨论】:

标签: java random


【解决方案1】:

不,相似的种子不会产生相似的随机数。
只有相同的种子才会产生相同的数字。

设置种子的代码是:

void setSeed(long seed) {
    this.seed = (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1);
..}

此公式避免this.seed 获取输入种子值的相似值(在构造函数中使用,或通过 setSeed()。

但是也有一些弱点,在 http://dontpanic.42.nl/2011/03/when-random-isn-as-random-as-expected.html

【讨论】:

    【解决方案2】:

    用于产生伪随机数的状态更新是chaotic。因此,使用相邻的种子值会导致完全不同的状态轨迹。

    【讨论】:

      【解决方案3】:

      随机数永远不是随机的。它们是完全预定义的,并且给定相同的种子将始终导致相同的数字,即使超过一百万次不同的命令运行,这就是它们被称为"Pseudorandom" 的原因。最好的办法是使用每次运行程序时都不同且不容易预测的值作为种子,例如当前时间和日期和/或已经过去的时钟周期数。

      【讨论】:

      • 这不是问题所在。他想知道两个相邻的种子是否产生相似的随机数。
      • 我解释说他们从不产生随机数。这确实是问题的答案。
      • 不是,不是。您需要解释输入种子对两个相邻种子的影响,以及它们对输出随机数的影响。
      猜你喜欢
      • 2018-08-20
      • 2017-12-24
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      相关资源
      最近更新 更多