如何仅使用“公平硬币”来产生成功概率为1/3的偏见硬币

时间:2019-01-16 00:06:29

标签: python

这是我作业中的一个问题: 编写一个函数(不带参数)并仅使用“公平硬币”来生成有偏差的硬币

我发现了一个需要使用二进制数字流的解决方案,因为二进制中的1/3为0.010101 ... 但是,我想知道是否有一种方法可以在不使用二进制数字流的情况下解决此问题?这是使用二进制数字流的代码

def fairCoin():
    return random.choice([0,1])  

def oneThird():
   while True:
      yield 0
      yield 1

def biasedCoin(binaryDigitStream, fairCoin):
   for d in binaryDigitStream:
      if fairCoin() != d:
         return d

1 个答案:

答案 0 :(得分:0)

希望我已经正确理解了这个问题。

我将使用T表示成功,使用F表示失败。我已将下一部分放在代码框中以正确格式化。它显示了结果是什么,如果仅参考某些结果,则累积概率是什么。

.                                     T %       F %
First fair coin flip                  50%       50%
Reflip only if the result was T       25%       75%
Reflip AGAIN only if F                37.5%     62.5%
Reflip AGAIN only if T                31.25%    68.75%
etc, etc

你知道我要去哪里吗?如果您这样做,请立即进行编码。

您需要一个Reflip函数,该函数将最后一次翻转的结果和一个公平的硬币作为参数。如果结果与上一个结果相同,它将掷硬币并将其交还给他人,否则它将以新结果再次调用自身。对其的第一次调用应使用F作为初始结果。从理论上讲,该函数可以无限地进行下去,但这是您需要生成1/3的原因,因为它不合理。