如何生成相对于递增种子的一对随机值?

时间:2013-04-29 20:34:07

标签: node.js math

我有一个200行200列的网格。 我想通过使用数字种子生成随机的坐标对i,j。这个种子是我每次生成一对数字时递增的值。

在生成40,000个值之后,所有坐标对之间都是唯一的,因为没有i,j和m,n,其中i = m且j = n。

例如:

seed 0: generates 43,12
seed 1: generates 154, 62

依此类推......

种子意味着相同的输入具有相同的功能会产生相同的结果,我很好。

我知道我需要某种伪随机算法,因为使用计算机时间或某些东西可能会生成两个相同的对,但我从哪里开始?

2 个答案:

答案 0 :(得分:1)

如果你希望每个种子返回一个随机点,并且所有这些点都是唯一的,那么最简单的方法就是将这些点放在一个数组中,对数组进行洗牌,然后使用整数种子来索引洗牌阵。例如,seed=0可以获得任何被移动到第一个位置的元素。

让我更容易让整数表示对,所以从0到40000(即200x200)创建一个数组,将其洗牌,然后使用0到40000范围内的种子。要转换整数, n,点对使用,i=n%200j=(n-i)/200

当然,由于您希望每个种子返回一个唯一的点,您必须拥有与点数相等或更少的种子,

答案 1 :(得分:-1)

您需要一个随机数生成器,您可以为其设置种子值。好像你已经意识到了这一点。你不能为Math.random()设置种子,但那里有很多伪随机数生成器。我建议你看一下seedrandom.js