是否可以划分伪随机数

时间:2016-05-11 18:04:40

标签: java random random-seed

我需要分发一个使用伪随机数的Java系统。系统的每个节点都必须处理一定数量的randoms。

结果必须是可重复的,因此randoms必须依赖种子作为参数。

Random random = new Random(long seed);

例如,如果我需要处理100个random并且我有2个节点,则第一个节点必须处理1到50,第二个节点必须处理51到100.

问题在于伪随机需要迭代自己以便每次都产生相同的rand序列(对于同一种子)。

在前面的例子中,有没有办法从第51个随机开始在第二个节点中生成random? (因此,避免在此节点中生成和删除1到50的randoms)。

2 个答案:

答案 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元素,并可以根据需要分配工作负载。