来自许多其他随机数的随机数,是否更随机?

时间:2017-07-22 10:50:13

标签: algorithm random

我们想要从区间[0,1]生成一个统一的随机数 让我们首先生成k个随机布尔值(例如通过rand()< 0.5)并根据这些子区间[m * 2 ^ { - k},(m + 1)* 2 ^ { - k}]的数量来决定会摔倒。然后我们使用一个rand()来获得最终输出m * 2 ^ { - k} + rand()* 2 ^ { - k}。
我们假设我们有任意精度。

以这种方式生成的随机数是否比通常的rand()更“随机”?

PS。我想子区间选择只相当于选择输出0的二进制表示.b_1 b_2 b_3 ...一次一个数字b_i,最后一步是将rand()的表示添加到输出的末尾。

3 个答案:

答案 0 :(得分:2)

这可能会有所帮助,但前提是您为第一位和最后一位使用不同的伪随机生成器。 (它不必是一个不同的伪随机算法,只是一个不同的种子。)

如果你使用相同的生成器,那么你仍然只能构造2 ^ n个不同的shuffle,其中n是随机生成器状态中的位数。

如果你有两个生成器,每个生成器有n位状态,那么你最多可以生成2 ^(2n)个不同的shuffle。

答案 1 :(得分:2)

使用随机数生成器进行修改,正如您通过仅使用一位随机空间然后迭代调用一样,通常会削弱其随机属性。所有RNG都无法对随机性进行一些统计测试,但如果您开始进行多次调用并将它们组合起来,您更有可能发现明显的周期出现。

答案 2 :(得分:2)

这取决于"更随机的定义"。如果使用更多随机生成器,则意味着更多随机状态,这意味着循环长度将更长。但循环长度只是随机生成器的一个属性。循环长度为2 ^ 64通常可以用于几乎任何目的(我知道的唯一例外是,如果你需要很多不同的长序列,比如用于某种模拟)。

但是,如果你将两个糟糕的随机生成器组合在一起,它们不一定会变得更好,你必须分析它。但是有一些发电机可以这样工作。例如,KISS就是一个例子:它结合了3个不太好的生成器,结果是一个很好的生成器。

对于卡片改组,您需要加密RNG。即使是非常好的,但不是加密的RNG也不足以达到此目的。例如,Mersenne Twister,这是一个很好的RNG,不适合安全的卡洗牌!这是因为观察输出数字,可以找出其内部状态,因此可以预测随机结果。

相关问题