Random 概率为三分之一的随机数
使用1位随机生成器(给出1或0),创建一个函数,该函数将以相同的概率返回0、1或2。正如注释中已经推导出的OP,解决方案是生成两个随机位并执行以下操作:Random 概率为三分之一的随机数,random,probability,Random,Probability,使用1位随机生成器(给出1或0),创建一个函数,该函数将以相同的概率返回0、1或2。正如注释中已经推导出的OP,解决方案是生成两个随机位并执行以下操作: 如果我们得到00,则返回0(25%的几率) 如果我们得到01,则返回1(25%几率) 如果我们得到10,则返回2(25%几率) 如果我们得到11,则再次生成两个随机位(25%几率) 现在,有两个问题值得思考 如果程序永远运行呢 这在理论上是可能的,但在实践中不会发生。我们需要生成序列11,11,11,11,。。。永远 由于获得11的几率只
- 如果我们得到
,则返回00
(25%的几率)0
- 如果我们得到
,则返回01
(25%几率)1
- 如果我们得到
,则返回10
(25%几率)2
- 如果我们得到
,则再次生成两个随机位(25%几率)11
现在,有两个问题值得思考
11
,11
,11
,11
,。。。永远
由于获得11
的几率只有25%,因此连续获得两个11
的几率为6.25%,因为0.25*0.25=0.0625
。每个连续的11
将另一个0.25
的乘数添加到概率中。在得到真实答案之前生成十个11
,概率约为1e-6
(百万分之一),而且这个函数非常快,即使它确实发生了,也不是问题
(实际上,这是不正确的,因为随机数生成器在引擎盖下是确定性的,但一个好的均匀RNG在反复测试时将具有这种独立性)。,我可以提出不同的解决方案,仅从一个范围中选择一个数字,实际上,它们足以给出概率几乎相等的数字。但这是一个理论问题,我无法找到一个严格的解决方案。问问自己:如果我生成一些随机位,我是否需要为每个可能的结果分配
0
、1
或2
?还有什么我可以做的吗?一个可能的解决方案:我们可以很容易地用2位生成0..3;所以,我们这样做,如果我们有0..2的结果,我们使用它,如果我们有3,我们重复这个动作,直到我们得到0..2。这似乎有正确的概率,但如果单比特随机操作需要任何时间(在实践中总是如此),那么整个操作的时间在理论上是不受限制的。那么现在的问题是,这是否可能在有限的时间内实现?克里斯,我想我听不懂你的想法。。如果我们丢弃一些输出,它仍然会影响结果的概率。唯一能精确获得1/3的方法是拒绝采样。不过,只需使用大量位(比如32位)和mod,就可以获得足够的接近度。取决于应用程序是否需要精确。”平均而言,大约44%的几率需要至少重新运行该过程一次以生成随机数“不清楚”。。对于生成一个随机数,它应该是25%,对不起,这句话是无关的,可能会让人困惑,所以我删除了它。这就是至少重做一次实验的可能性。所以是重做一次的概率加上重做两次的概率加上重做三次的概率。。。所有这些概率加起来等于一个大于25%的数字。我可能在计算中出错了,但是。。。看起来接近33%。但这不是一个很重要的事实,所以如果你不明白的话,我会忽略它。