核心要点

  • 已知硬币正面概率 p 未知且不等于 0.5,要生成无偏的 0/1。

  • 冯诺依曼(von Neumann)法:连抛两次,看有序结果。

  • HT → 输出「正」,TH → 输出「反」,二者概率都是 p(1-p),相等。

  • HH 或 TT 抛出则丢弃,重新来过(拒绝采样)。

标准回答

一、先把结论讲清楚

可以先说结论:不要用单次抛硬币判断,要连续抛两次,只保留 HT 和 TH

一、为什么 HT 和 TH 可以用?

假设正面 H 的概率是 p,反面 T 的概率是 1-p。连续两次里,HT 的概率是 p(1-p),TH 的概率是 (1-p)p,这两个概率完全一样。所以可以规定:HT 输出 0,TH 输出 1。

二、拆开机制和判断点

二、HH 和 TT 怎么办?

HH 的概率是 p²,TT 的概率是 (1-p)²,通常不相等,所以不能拿它们直接当 0/1。做法是:看到 HH 或 TT 就丢掉,重新抛两次

三、为什么最终公平?

因为真正输出的时候,只可能来自 HT 或 TH,而这两种情况等概率。

三、补上例子、边界和取舍

所以条件在“本轮成功输出”的前提下,0 和 1 各占一半,最终就是严格公平的硬币

如果面试官追问效率,可以补一句:每轮成功概率是 2p(1-p),所以平均要 1/[2p(1-p)] 轮才能产出一个公平比特;但这题核心不是效率,而是用一对对称事件消除偏置。

常见误区

⚠️ 常见踩坑

误区一:抛一次直接把正面当 0、反面当 1。 这样偏置还在,概率仍然是 p。

误区二:用 HH 和 TT 分别代表两个结果。 HH 和 TT 的概率一般不相等,只有 HT 和 TH 才是天然对称的一对。

追问

追问 1相邻两次抛掷必须独立吗?

必须。这个方法成立的关键是 HT 和 TH 概率相等。如果两次抛掷相关,这个对称性可能会被破坏,输出就不一定公平了;所以面试里要明确说“独立同分布”这个前提。

追问 2这种方法浪费很多抛掷,有没有更高效的?

有,但面试里通常说到思路就够了。比如 Peres 提取器会继续利用被丢弃的 HH/TT 信息,比朴素冯诺依曼法更接近熵极限

🔗 相似问题

同一考点的不同问法,换着练更稳

延伸学习

按主题分类的相关资源,便于系统复习