利用有偏硬币做出无偏决策

问题描述:

爱丽丝和鲍勃想利用一枚均匀的硬币来决定是去看歌剧还是看电影,可是他们手边仅有一枚有偏硬币,怎么利用这枚有偏硬币来做出无偏的决策,即以$\frac{1}{2}$的概率看电影,$\frac{1}{2}$的概率看歌剧。----“源于《概率导论》”

分析:

既然是一枚有偏硬币,因此假设投掷一次得到正面朝上的概率为p(p≠0.5),得到反面朝上的概率为1-p。因此,如果一次一次的投掷,得到的一定是有偏的情况,但是,如果两次两次的投掷,那么就一共有4种情况,其中有两种情况的概率是一致的,也就是说,如果两次两次的投掷,那么得到一次正面和一次反面的概率均为p*(1-p),这里不考虑顺序,顺序作为一种无偏因素,这是因为这种情况下他们概率相同,而顺序不同,相当于过滤出全概率的一个子空间。因此,一种简单的解决方案如下:

两次两次的投掷这枚硬币,如果连续两次得到的结果是一致的,就重新抛掷,知道连续两次抛掷的结果不一致,然后规定两次抛掷不一致结果中的第一次是听谁的决策就可以。

 

转载于:https://www.cnblogs.com/andyniu/p/7398901.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
硬币问题是一个经典的分治问题。假设你有 $n$ 枚硬币,其中有一枚是假的,比真的硬币轻。你可以使用天平来比较两堆硬币的重量。问你最少需要称多少次才能确定哪枚硬币是假的。 分治法是一种将问题分解成更小子问题的算法。在假硬币问题中,我们可以将硬币分成三组,然后比较其中两组,如果它们的重量相等,那么假硬币在第三组中;否则,假硬币在较轻的那组中。然后我们可以使用同样的方法继续在第三组中查找假硬币,递归执行下去,直到只剩下一枚硬币。 在每次比较中,我们总是能将硬币分成三组,因此每次比较的次数是固定的,即 $1$ 次。每次递归我们将问题规模缩小了 $3$ 倍,因此总的比较次数是 $T(n) = T(n/3) + 1$,解得 $T(n) = O(\log_3 n)$。 下面是一个使用分治法解决假硬币问题的 Python 代码: ```python def find_fake_coin(coins): n = len(coins) if n == 1: return coins[0] elif n % 3 == 0: # 将硬币分成三组,分别称重 one_third = n // 3 left = coins[:one_third] middle = coins[one_third:2*one_third] right = coins[2*one_third:] # 比较左右两组的重量 if sum(left) == sum(right): # 假硬币在中间一组 return find_fake_coin(middle) elif sum(left) < sum(right): # 假硬币在左边一组 return find_fake_coin(left) else: # 假硬币在右边一组 return find_fake_coin(right) else: # 如果硬币不能被分成三组,我们可以在两端添加一些真硬币 # 使得硬币数变成 3 的倍数 k = n - (n // 3) * 3 coins += [1] * (3 - k) return find_fake_coin(coins) ``` 其中,`coins` 是一个列表,表示所有硬币的重量。函数返回假硬币的重量。如果硬币不能被分成三组,我们可以在两端添加一些真硬币,使得硬币数变成 3 的倍数。这里我们添加了重量为 $1$ 的真硬币,因为它不会影响结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值