random - 非递归随机数生成器
问题描述
我已经搜索了伪 RNG 算法,但我能找到的似乎都是通过使用以前的结果作为种子来生成下一个数字。有没有办法以非递归方式生成它们?
我需要这个的场景是在 OpenCL 并发编程期间,每个线程/像素都需要一个独立的 RNG。我尝试使用 播种它们BIG_NUMBER + work_id
,但结果中有强烈的视觉模式。我尝试了几种不同的 RNG 算法,都遇到了这个问题。显然,如果您以递归方式生成,它们仅保证数字是独立的,但当您使用序列号作为种子时则不能。
所以我的问题是:我可以从一个序列号数组中生成一个随机数数组,每个数字独立且恒定的时间吗?还是在数学上是不可能的?
作为我的 openCL 问题的解决方案,我可以先递归地预先生成大量随机数并存储在 GPU 内存中,然后使用种子作为索引。但是我对上面的问题很好奇,因为根据我对混沌理论的非常简单的理解,仅仅通过做一堆溢出和截止似乎很有可能。
解决方案
我可以从序列号数组中为每个数字独立且恒定的时间生成一个随机数数组吗?还是在数学上是不可能的?
当然可以 - 在计数模式下使用分组密码。它通常被称为基于计数器的 RNG,第一个被广泛使用的是Fortuna RNG
推荐阅读
- node.js - .gitignore 文件不会自动生成
- javascript - UPD:React 不会从函数返回 HTML 元素
- reactjs - 只读类型 { } 上不存在属性
- php - 创建从一个数据库到另一个数据库的记录导出
- css - 未选中单选按钮时禁用 number_field
- javascript - 如何使消息减半以避免消息长度错误?
- c++ - 注册表设置 1 个字符
- amazon-web-services - Cloudfront 将在没有 www 但没有 www 的情况下为我的网站提供服务。我在哪里可以调整这个?
- powershell - 比较两个 CSV 的相似字符串
- python - 在 Python 中组合 2 个代码