我需要分发一个使用伪随机数的Java系统。系统的每个节点都必须处理一定数量的randoms。
结果必须是可重复的,因此randoms必须依赖种子作为参数。
Random random = new Random(long seed);
例如,如果我需要处理100个random并且我有2个节点,则第一个节点必须处理1到50,第二个节点必须处理51到100.
问题在于伪随机需要迭代自己以便每次都产生相同的rand序列(对于同一种子)。
在前面的例子中,有没有办法从第51个随机开始在第二个节点中生成random? (因此,避免在此节点中生成和删除1到50的randoms)。
答案 0 :(得分:0)
TableView tvProfile = new TableView
{
HasUnevenRows = true,
Intent = TableIntent.Form,
Root = new TableRoot {
new TableSection ("Active")
{
(new SwitchCell {Text = "Pause Timer" } )
}
}
};
怎么样?
您可以使用相同的种子,在您执行“+ 0”的另一个节点上执行“+ 50”。
如果你不喜欢它,你现在可以在两个节点上获得相同的序列,只需50,你就可以使用相同的种子从一个随机生成器构造每个节点的种子。
即
节点1:
random.nextInt(50) + 50
节点2:
Random seedGenerator = new Random(globalSeed)
Random myRandom = new Random(seedGenerator.nextInt())
int something = myRandom.nextInt(50)
节点1将提供介于0和50之间的节点,节点2介于50和100之间。
答案 1 :(得分:0)
您可以使用另一种方法来生成伪随机序列:考虑使用散列函数(类型为整数 - >整数),并将其与自然数相关联,因此序列中的项将为{{1而不是hash(0), hash(1), hash(2)
。这样,您可以访问seed, step(seed), step(step(seed))
中伪随机序列中的i
元素,并可以根据需要分配工作负载。