Python 如何仅使用“生成1/3成功概率的有偏硬币”;“公平硬币”;
这是我作业中的一个问题: 编写一个函数(不带参数)并仅使用“公平硬币”生成一个有偏差的硬币 我发现了一个需要使用二进制数字流的解决方案,因为二进制中的1/3是0.010101。。。 然而,我想知道是否有一种不用二进制数字流就能解决这个问题的方法?下面是使用二进制数字流的代码Python 如何仅使用“生成1/3成功概率的有偏硬币”;“公平硬币”;,python,Python,这是我作业中的一个问题: 编写一个函数(不带参数)并仅使用“公平硬币”生成一个有偏差的硬币 我发现了一个需要使用二进制数字流的解决方案,因为二进制中的1/3是0.010101。。。 然而,我想知道是否有一种不用二进制数字流就能解决这个问题的方法?下面是使用二进制数字流的代码 def fairCoin(): return random.choice([0,1]) def oneThird(): while True: yield 0 yield 1 d
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
希望我正确理解了这个问题 我要用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,因为它是不合理的。到目前为止,你对家庭作业问题做了哪些尝试?您发布的代码似乎来自。请参阅。@Carcigenicate仅通过掷硬币不可能生成6个相等加权的概率。你只能生成2^n个相等加权的概率,其中n是翻转的次数。我投票将这个问题作为离题题结束,因为这是一个家庭作业问题,投入的精力最少。