我需要一些好的伪随机数生成器,它可以像纯函数一样根据之前的输出进行计算,而无需任何状态隐藏。 “好”我的意思是:
我必须能够以运行它的方式参数化生成器2^n
任何参数(或其中一些大的子集)的迭代应覆盖之间的所有或几乎所有值0
and 2^n - 1
, where n
是输出值的位数。
组合发电机输出n + p
位必须覆盖之间的所有或几乎所有值0
and 2^(n + p) - 1
如果我运行它2^n
对其参数的每个可能组合进行迭代,其中p
是参数中的位数。
例如,LCG http://en.wikipedia.org/wiki/Linear_congruential_generator可以像纯函数一样计算,它可以满足第一个条件,但不能满足第二个条件。比如说,我们有 32 位 LCG,m = 2^32
并且它是恒定的,我们的p = 64
(两个32位参数a
and c
), n + p = 96
,因此我们必须从输出中查看三个整数的数据以满足第二个条件。不幸的是,由于输出中奇数和偶数整数的严格交替序列,无法满足条件。为了克服这个问题,必须引入隐藏状态,但这使得函数不纯并且打破了第一个条件(长隐藏周期)。
EDIT:严格来说,我想要参数化的函数族p
位和完整状态n
位,每个生成所有可能的二进制字符串p + n
位以独特的“随机”方式,而不仅仅是连续递增(p + n)
- 位整数。选择这种独特的方式需要参数化。
是我想要的太多了吗?
您可以使用任何带有固定密钥的分组密码。要生成下一个数字,请解密当前数字,递增它,然后重新加密。由于分组密码是 1:1,因此它们必须在重复之前迭代输出域中的每个数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)