使用1位随机生成器(给出1或0),创建一个以等概率返回0,1或2的函数。
答案 0 :(得分:3)
正如OP已在评论中推断出的那样,解决方案是生成两个随机位并执行以下操作:
00
,则返回0
(25%偶然)01
,则返回1
(25%偶然)10
,则返回2
(25%偶然)11
,则再次生成两个随机位(25%几率)现在,有两个问题需要考虑。
理论上可能,但实际上这不会发生。我们需要永久生成序列11
,11
,11
,11
,...
由于获得11
只有25%的可能性发生,因此连续获得两个11
将会发生6.25%,因为0.25*0.25 = 0.0625
。每个连续的11
都会为概率增加另一个0.25
倍增因子。在得到真实答案之前生成10 11
的概率约为1e-6
(百万分之一),而且这个函数速度很快,即使它确实发生也不是问题。
答案是否。生成两组随机位可以假设为独立进程。这意味着知道前两位的答案不会告诉我们接下来两位的答案。
当我们决定再次开始生成过程时,就好像我们从未在第一时间做过那样,因为我们得到的最后一个结果与下一个结果无关。
(实际上,事实并非如此,因为随机数生成器在引擎盖下是确定性的,但是重复测试时,良好的统一RNG将具有这种独立性。)