首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个算法的有偏抛硬币的预期次数是多少?

这个算法的有偏抛硬币的预期次数是多少?
EN

Stack Overflow用户
提问于 2012-01-25 07:43:57
回答 3查看 1.3K关注 0票数 3

假设我有一枚偏向的硬币。当翻转时,让出正面的概率为4/5。

为了假装一次公平的抛出,我追求以下算法来模拟这种情况。假设True表示正面,而False表示反面。

P(doUnfairFlip() = 0) = 0.8

P(doUnfairFlip() = 1) = 0.2

代码语言:javascript
运行
复制
def fakeFairToss():
    flip1 = 0
    flip2 = 0
    while (flip1 == flip2):
        flip1 = doUnfairFlip()
        flip2 = doUnfairFlip()
    return (True if (flip1 == 0) else False)

它利用了这样一个事实,即一个人在两次抛硬币后同样有可能得到正面-反面或反面-正面。

每次运行这个函数时,我应该期望这个有偏向的硬币有多少次抛出?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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调用。

票数 4
EN

Stack Overflow用户

发布于 2012-01-25 08:36:05

如果你想说的是

代码语言:javascript
运行
复制
P(rand() % 2 = 0) = 0.8
P(rand() % 2 = 1) = 0.2

则满足循环条件的概率为

代码语言:javascript
运行
复制
0.8*0.8 + 0.2*0.2 = 0.68

当p=0.68时,执行循环的次数与预期的失败次数一样多,也就是3.125次。因此,您应该希望循环运行3.125次,总共调用rand() 6.25次。

票数 1
EN

Stack Overflow用户

发布于 2012-01-25 07:52:56

我认为大约运行了1.5次while循环,或者调用了3次rand()。不过,我的数学可能是错的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8995978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档