首先,有没有像随机访问随机数生成器这样的东西,假设rand100()总是生成一个从0到100的值,那么您不仅可以像我们所习惯的那样按顺序生成随机数:
for (int i=0;i<5;i++)
print rand100()
output:
14
75
36
22
67但也可以随机访问任意随机值,如:
只要不更改种子,rand100(0)就会输出14
rand100(3)将始终输出22
rand100(4)总是输出67
以此类推。
我实际上已经找到了一个开源生成器算法来做这件事,但是你不能改变种子。我知道伪随机性是一个复杂的字段;我不知道如何修改它来添加该功能。
有没有一个可播种的随机访问随机数生成器,最好是开源的?还有更好的说法吗?我可以在谷歌上搜索更多信息。
如果不是,我的问题的第二部分将是,是否有可靠的随机、开源、传统的可播种伪随机数生成器,以便我可以将其移植到多个平台/语言,同时为任何给定的种子保留每个平台的一致值序列?
发布于 2016-07-21 13:10:16
伪随机数生成器的PCG family可以在对数时间内向前和向后跳跃(即,向前跳跃1000个数字需要O(log(1000))操作),这可能足够好到足以被认为是随机访问。参考C和C++实现都支持此功能。
PCG站点首页上的表格表明,许多其他生成器可以支持跳跃,但我还没有在任何实现中看到它。
发布于 2010-06-11 07:19:57
我没有听说过这样的事情,但在我看来,你可以使用一个像样的散列,并编写一个包装器函数,它接受一个种子值和你的“索引”,并通过散列函数运行它们。我不确定各种密码散列函数输出的比特的随机性,但我想有人已经看过了。
发布于 2013-10-22 10:39:13
Blum Blum Shub是一个伪随机数生成器,具有种子和随机访问它生成的任何值的权限。
https://stackoverflow.com/questions/3019169
复制相似问题