核心要点
已知硬币正面概率 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 信息,比朴素冯诺依曼法更接近熵极限。
🔗 相似问题
同一考点的不同问法,换着练更稳
延伸学习
按主题分类的相关资源,便于系统复习
