algorithm - 结合 PRNG 和 'true' 随机,快速和(也许)愚蠢的方式

标签 algorithm random

采用像 xoroshiro 或 xorshift 这样的快速 PRNG 和像/dev/random 这样的“真正的”基于熵的生成器。

使用“真”随机数作为 PRNG 的种子,但也从“真”随机数中获取单个数字,并使用它对来自 PRNG 的所有结果进行异或以产生最终输出。

然后,每隔一段时间(例如生成 10000 个随机数后)替换这个数字。

也许这很天真,但我希望这会改进 PRNG 的某些方面,例如周期大小,而对速度的影响可以忽略不计。我哪里错了?

我在这里关心的是生成 UUID(快速),它们基本上是 128 位数字,应该是“真正唯一的”。我担心的是,使用现代 PRGN,例如周期接近“恰好”2^128 的 xorshift 系列,熵种子 PRNG 生成器发生碰撞的可能性并不像真正的随机数那样可以忽略不计。

最佳答案

与普通 PRNG 相比,改进很小。例如,可以通过对连续结果进行异或来消除用于屏蔽结果的单个真随机数。这将与连续的普通 PRNG 数字的 XOR 值相同。因此,如果您可以预测 PRNG,那么对改进后的序列做同样的事情并不难。

关于algorithm - 结合 PRNG 和 'true' 随机,快速和(也许)愚蠢的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51999745/

相关文章:

javascript - 在围绕圆的随机划分上设置一个点

c++ - 线性同余发生器的分析是错误的?

math - 随机数的算术会减少它的熵吗?

c - 毕达哥拉斯三元组

java - 重新分配数组

sql-server - 在 SQL Server 2008 中插入随机数据内容

python - 在python中打印排序和未排序的列表

c - 如何根据字节数组生成随机数?

algorithm - 如何在运行 Neo4j 的 louvain 算法 : java. lang.ArrayIndexOutOfBoundsException : -1? 的上下文中修复以下错误

performance - 这个算法的运行时间和空间复杂度是多少,为什么