algorithm - 是否存在没有隐藏状态的 "good"PRNG 生成值?

标签 algorithm prng bijection

我需要一些好的伪随机数生成器,它可以像纯函数一样从以前的输出中计算出来,没有任何状态隐藏。在“好”下,我的意思是:

  1. 我必须能够以为 2^n 运行它的方式参数化生成器使用任何参数(或其中的一些大子集)的迭代应该覆盖 0 之间的所有或几乎所有值。和 2^n - 1 , 其中n是输出值的位数。

  2. n + p 的组合生成器输出位必须涵盖 0 之间的所有或几乎所有值和 2^(n + p) - 1如果我为 2^n 运行它对其参数的每个可能组合进行迭代,其中 p是参数的位数。

例如,LCG可以像纯函数一样计算,它可以满足第一个条件,但不能满足第二个条件。比如说,我们有 32 位 LCG,m = 2^32它是不变的,我们的p = 64 (两个 32 位参数 ac ),n + p = 96 ,因此我们必须从输出中查看三个整数的数据以满足第二个条件。不幸的是,由于输出中奇数和偶数整数的严格交替序列,因此无法满足条件。为了克服这个问题,必须引入隐藏状态,但这使得功能不纯粹并且打破了第一个条件(长隐藏期)。

编辑:严格来说,我想要由 p 参数化的函数族位和 n 的完整状态位,每个生成 p + n 的所有可能的二进制字符串以独特的“随机”方式位,而不仅仅是连续递增 (p + n) -位整数。选择该独特方式所需的参数化。

我是不是想太多了?

最佳答案

您可以使用任何带有固定 key 的分组密码。要生成下一个数字,请解密当前数字,递增它,然后重新加密它。因为 block 密码是 1:1,所以它们必须在重复之前遍历输出域中的每个数字。

关于algorithm - 是否存在没有隐藏状态的 "good"PRNG 生成值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2872138/

相关文章:

algorithm - 最大限度地降低转型成本

parsing - 是否有一种既定的方法来编写可以重建其确切输入的解析器?

algorithm - 如何表示隐含关系?

Java 8 SecureRandom.getInstanceStrong 来源

从线数据中获取区域的算法(CAD填充算法)

algorithm - 参数相关的 PRNG

language-agnostic - 提取 PRNG 的初始种子值?

java - JBoss接缝: inject in @Create method possible?

java - 查找少于查询的元素数量的有效算法

c++ - 让老鼠走出迷宫