我需要生成一个确定性(即可重复)序列的伪随机数,给定一个初始种子并选择该序列中的第n项。
如果JavaScript的随机函数是可种子化的,我可以这样做:
然而,并没有替代方案,可种子的伪随机数生成器看起来有点慢;要求第250个数字会很昂贵。我认为这里需要哈希,也许像md5(seed + seq) % max这样的东西,但JavaScript没有md5(),如果我在代码中执行它,可能会有更好的哈希选择。我想要一个函数,其中x = randomNth(seed, seq, maxVal) // x是int && x >= 0 && x < maxVal,或者理想情况下,x = randomNth(seed, seq) // x >= 0 && x < 1,与Math.random()相同。其他要求:必须在node.js和浏览器中运行,数字应该是统计随机的(或者接近于小周期),应该是O(1)并且性能合理。
如果JavaScript的随机函数是可种子化的,我可以这样做:
function randomNth(seed, seq)
{
var r;
Math.randomSeed(seed);
for (var i = 0; i++ < seq; i++)
{
r = Math.random();
}
return r;
}
然而,并没有替代方案,可种子的伪随机数生成器看起来有点慢;要求第250个数字会很昂贵。我认为这里需要哈希,也许像md5(seed + seq) % max这样的东西,但JavaScript没有md5(),如果我在代码中执行它,可能会有更好的哈希选择。我想要一个函数,其中x = randomNth(seed, seq, maxVal) // x是int && x >= 0 && x < maxVal,或者理想情况下,x = randomNth(seed, seq) // x >= 0 && x < 1,与Math.random()相同。其他要求:必须在node.js和浏览器中运行,数字应该是统计随机的(或者接近于小周期),应该是O(1)并且性能合理。