以三分之一的概率获得随机数

时间:2015-02-17 18:33:27

标签: random probability

使用1位随机生成器(给出1或0),创建一个以等概率返回0,1或2的函数。

1 个答案:

答案 0 :(得分:3)

正如OP已在评论中推断出的那样,解决方案是生成两个随机位并执行以下操作:

  • 如果我们获得00,则返回0(25%偶然)
  • 如果我们获得01,则返回1(25%偶然)
  • 如果我们获得10,则返回2(25%偶然)
  • 如果我们得到11,则再次生成两个随机位(25%几率)

现在,有两个问题需要考虑。

  1. 如果程序永远运行怎么办?
  2. 理论上可能,但实际上这不会发生。我们需要永久生成序列11111111,...

    由于获得11只有25%的可能性发生,因此连续获得两个11将会发生6.25%,因为0.25*0.25 = 0.0625。每个连续的11都会为概率增加另一个0.25倍增因子。在得到真实答案之前生成10 11的概率约为1e-6(百万分之一),而且这个函数速度很快,即使它确实发生也不是问题。

    1. 重新生成这两位会影响我们想要的1/3概率吗?
    2. 答案是。生成两组随机位可以假设为独立进程。这意味着知道前两位的答案不会告诉我们接下来两位的答案。

      当我们决定再次开始生成过程时,就好像我们从未在第一时间做过那样,因为我们得到的最后一个结果与下一个结果无关。

      (实际上,事实并非如此,因为随机数生成器在引擎盖下是确定性的,但是重复测试时,良好的统一RNG将具有这种独立性。)