是否存在随机可访问的伪随机数生成器?(最好是开源)

nsf*_*way 14 random random-access

首先,有一个随机访问随机数生成器,你不仅可以按顺序生成随机数,因为我们都习惯了,假设rand100()总是生成0-100的值:

for (int i=0;i<5;i++)
   print rand100()

output: 
14
75
36
22
67
Run Code Online (Sandbox Code Playgroud)

但也随机访问任何随机值,如:

只要您没有更改种子,rand100(0)就会输出14

rand100(3)总是输出22

rand100(4)总是输出67

等等...

我实际上发现了一个开源生成器算法,但是你不能改变种子.我知道伪随机性是一个复杂的领域; 我不知道如何改变它来添加该功能.

是否有可播种的随机访问随机数生成器,最好是开源?还是有一个更好的术语我可以谷歌获取更多信息?

如果没有,我的问题的第2部分是,是否有任何可靠的随机开源传统可种子伪随机数生成器,所以我可以将它移植到多个平台/语言,同时为任何给定的种子保留每个平台的一致值序列?

Mic*_*urr 6

我没有听说过类似的东西,但在我看来,你可以使用一个像样的哈希并编写一个包装器函数,它接受种子值和你的'索引',并通过哈希函数运行它们.我不确定各种加密哈希函数输出的比特的随机性,但我想有人看了一下.


mnd*_*rix 5

Blum Blum Shub是一个伪随机数生成器,具有种子和随机访问它生成的任何值.


Eva*_*haw 5

PCG系列的伪随机数生成器可以跳向前和向后的对数时间(即跳跃前进1000号需要O(日志(1000))操作),这可能是要考虑的随机存取不够好。参考 C 和 C++ 实现都支持此功能。

PCG 站点首页上的表格表明许多其他生成器可以支持跳转,但我没有在任何实现中看到它。