伪随机生成:这或多或少是随机的吗?

时间:2018-01-09 23:59:16

标签: python random

我很好奇数学如何解决这个问题,但我自己也不够聪明。 (我试过了)

如果您生成1000个伪随机数的列表,例如:

random_numbers = []
for i in range(1,1000):
    random_numbers.append(random.randrange(1000,9999))

然后生成另一个伪随机数作为列表的索引:

final_value = random_numbers[rand.randrange(1,1000)]

直观地说,这似乎是更多随机而不是简单地生成1个伪随机值,如下所示:

number = random.randrage(1000,9999)

然而,我知道经常有很多随意性的问题,所以我想我会问你们。

1 个答案:

答案 0 :(得分:1)

有趣的是,它是一样的!

虽然看起来很直观,你最终会得到一个更随机的数字,因为你通过反复运行随机数生成器为你的选择“添加更多随机性” - 因为randrange approximates a uniform distribution你的样本空间最终在两个选项之间相同。我们来看一个更简单的例子:

假设您有一张52张牌的标准套牌。您可以随机从此列表中选择10张牌,同时允许自己选择重复的牌(即,您最终可能会多次选择同一张牌)。您特别选择任何卡的机会等于:

10 * 1/52 = 10/52

因为你每次挑选卡的几率是1/52,你重复10次。现在,让我们假设我们在第一组中选择了我们的牌:我们将从第二组中选择它的可能性有多大?好吧,我们现在有十分之一的机会选择它!

我们在第一个选择然后第二个选择中选择任何特定牌的概率是:

10/52 * 1/10 = 1/52

与首先挑选任何旧卡的概率完全相同!