假设我有一枚偏向的硬币。当翻转时,让出正面的概率为4/5。
为了假装一次公平的抛出,我追求以下算法来模拟这种情况。假设True
表示正面,而False
表示反面。
P(doUnfairFlip() = 0) = 0.8
和
P(doUnfairFlip() = 1) = 0.2
def fakeFairToss():
flip1 = 0
flip2 = 0
while (flip1 == flip2):
flip1 = doUnfairFlip()
flip2 = doUnfairFlip()
return (True if (flip1 == 0) else False)
它利用了这样一个事实,即一个人在两次抛硬币后同样有可能得到正面-反面或反面-正面。
每次运行这个函数时,我应该期望这个有偏向的硬币有多少次抛出?
发布于 2012-01-25 08:44:43
假设来自doUnfairFlip()
的样本是IID,相等的几率是1/5^2 + 4/5^2 = 17/25 = 68%
。
而不是考虑每次函数调用的循环迭代,我们可以将这种情况看作是一个无界的迭代序列,偶尔被函数返回“打断”。注意,函数返回恰好发生在相等失败的时候,100 - 68 = 32%
的时间。
现在,我们可以使用lambda = 0.32
将这种情况确定为离散的Poisson process。相应分布的平均值也是lambda
:我们可以期待每次循环迭代的0.32
函数调用,或每次调用的1.0 / 0.32 = 3.125
迭代,或每次调用对doUnfairFlip()
的6.25
调用。
发布于 2012-01-25 08:36:05
如果你想说的是
P(rand() % 2 = 0) = 0.8
P(rand() % 2 = 1) = 0.2
则满足循环条件的概率为
0.8*0.8 + 0.2*0.2 = 0.68
当p=0.68时,执行循环的次数与预期的失败次数一样多,也就是3.125次。因此,您应该希望循环运行3.125次,总共调用rand() 6.25次。
发布于 2012-01-25 07:52:56
我认为大约运行了1.5次while循环,或者调用了3次rand()。不过,我的数学可能是错的。
https://stackoverflow.com/questions/8995978
复制相似问题