Мне нужно сгенерировать детерминированную (т. Е. Повторяемую) последовательность из псевдослучайных чисел с заданным начальным числом и выбрать n-й элемент из этой последовательности.
Если случайная функция JavaScript была возможнойЯ мог бы просто сделать:
function randomNth(seed, seq)
{
var r;
Math.randomSeed(seed);
for (var i = 0; i++ < seq; i++)
{
r = Math.random();
}
return r;
}
Однако, это не так, и альтернативные посеянные PRNG выглядят немного медленными;запрашивать 250-е число будет дорого.
Я думаю, что здесь мне нужен хеш, возможно, что-то вроде md5(seed + seq) % max
, но в JavaScript нет md5 (), и если я делаю это в коде, естьвозможно лучший выбор хеша.
Я бы хотел функцию где
x = randomNth(seed, seq, maxVal) // x is int && x >= 0 && x < maxVal
или, в идеале
x = randomNth(seed, seq) // x >= 0 && x < 1, same as Math.random()
Другие требования:
- должно выполняться в файле node.js и в браузере.
- числа должны быть статистически случайными (или достаточно близкими, так как период будет небольшим)
- должно быть O (1) и достаточно быстродействующим