【发布时间】:2016-05-11 18:04:39
【问题描述】:
我需要分发一个使用伪随机数的 Java 系统。系统的每个节点都必须处理一定数量的随机数。
结果必须是可重现的,因此随机数必须依赖于种子作为参数。
Random random = new Random(long seed);
例如,如果我需要处理 100 个随机数并且我有 2 个节点,则第一个节点必须处理 1 到 50,第二个节点必须处理 51 到 100。
问题在于伪随机数需要迭代自己,以便每次都产生相同的随机数序列(对于相同的种子)。
在前面的例子中,有没有办法从第 51 个随机数开始在第二个节点中生成随机数? (因此,避免了在此节点中生成和丢弃 1 到 50 的随机数)。
【问题讨论】:
-
不是特别的。你最好弄清楚如何在节点之间划分随机数的另一种方案,例如两个节点将使用每隔一个随机数,而不是前 50 个和后 50 个。即使您更改节点数,您是否需要它是可重现的?如果不是这样,可以通过使用第一个
Random生成的种子来键入其他Random实例来使事情变得更容易。 -
嗯...这不能解决我的问题,因为每个节点无论如何都必须处理到第 100 个随机数。
-
不要使用伪随机序列,而是使用哈希函数。第一个节点将处理 1..50 的哈希值,第二个节点将处理 51..100 的哈希值
-
怎么不是解决方案?跳过某些输入的特定节点与处理每个输入不同。
-
因为这个过程不是很复杂。问题的复杂性在于必须生成的随机数。例如,500'000.000。
标签: java random random-seed