首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否存在可随机访问的伪随机数生成器?(最好是开源的)

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

Stack Overflow用户
提问于 2010-06-11 07:08:26
回答 8查看 1.5K关注 0票数 16

首先,有没有像随机访问随机数生成器这样的东西,假设rand100()总是生成一个从0到100的值,那么您不仅可以像我们所习惯的那样按顺序生成随机数:

代码语言:javascript
复制
for (int i=0;i<5;i++)
   print rand100()

output: 
14
75
36
22
67

但也可以随机访问任意随机值,如:

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

rand100(3)将始终输出22

rand100(4)总是输出67

以此类推。

我实际上已经找到了一个开源生成器算法来做这件事,但是你不能改变种子。我知道伪随机性是一个复杂的字段;我不知道如何修改它来添加该功能。

有没有一个可播种的随机访问随机数生成器,最好是开源的?还有更好的说法吗?我可以在谷歌上搜索更多信息。

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-07-21 13:10:16

伪随机数生成器的PCG family可以在对数时间内向前和向后跳跃(即,向前跳跃1000个数字需要O(log(1000))操作),这可能足够好到足以被认为是随机访问。参考C和C++实现都支持此功能。

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

票数 5
EN

Stack Overflow用户

发布于 2010-06-11 07:19:57

我没有听说过这样的事情,但在我看来,你可以使用一个像样的散列,并编写一个包装器函数,它接受一个种子值和你的“索引”,并通过散列函数运行它们。我不确定各种密码散列函数输出的比特的随机性,但我想有人已经看过了。

票数 7
EN

Stack Overflow用户

发布于 2013-10-22 10:39:13

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3019169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档