我想知道是否有任何廉价有效的函数可以通过索引生成伪随机数?有类似的实现:
var rand = new PseudoRandom(seed); // all sequences for same seeds are equal
trace(rand.get(index1)); // get int number by index1, for example =0x12345678
trace(rand.get(index2));
...
trace(rand.get(index1)); // must return the SAME number, =0x12345678
可能它不是关于随机性,而是关于良好(尽可能快速和接近均匀分布)散列,其中初始种子用作盐。
答案 0 :(得分:2)
您可以使用流密码Salsa20构建此类随机数生成器。 Salsa20的一个不错的功能是你可以非常便宜地跳到任何偏移。 Salsa20速度很快,通常每字节少于20个周期。由于密码与真正的随机流无法区分,因此均匀性应该非常好。
由于你可能不需要加密安全随机数,你甚至可以将轮数减少到8而不是通常的20轮。
另一种选择是使用Salsa20背后的思想,如何混合状态数组(Bernstein称之为散列函数),以构建自己的随机数生成器。