核心要点

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

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

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

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

标准回答

设硬币每次正面(H)概率为 p(未知,0<p<1),反面(T)概率 1-p。关键观察:连续抛两次得到「先正后反 HT」的概率是 p(1-p),得到「先反后正 TH」的概率是 (1-p)p,两者完全相等。

算法:每轮抛两次。

  • 若结果是 HT,输出 0(或称「正」);
  • 若结果是 TH,输出 1(或称「反」);
  • 若结果是 HH 或 TT,舍弃本轮,重新抛两次。

由于 HT 与 TH 等概率,且在「非 HH/TT」的条件下二者各占一半,故输出严格无偏 P(0)=P(1)=1/2,且与 p 的具体值无关。

期望成本:每轮以概率 2p(1-p) 产出一个比特,期望需要 1/[2p(1-p)] 轮(即 1/[p(1-p)] 次抛掷)才能输出一个公平比特;当 p=0.5 时最优,需 2 次抛掷。该方法对 p 完全自适应,无需知道 p。

常见误区

⚠️ 常见踩坑

不能简单地「抛一次,正算 0 反算 1」——那样偏向概率仍是 p;也不能用 HH/TT 区分输出,因为它们概率 p² 与 (1-p)² 不相等。必须用 HT 与 TH 这对对称事件。

追问

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

必须独立同分布。若存在相关性,HT 与 TH 概率不再相等,方法失效。若只有平稳但相关,可改用 Peres / Elias 等更复杂的提取器。

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

有。Peres 提取器递归利用被丢弃的 HH/TT 信息以及成对结果的「第二层」随机性,渐近逼近信息论极限(每次抛掷可提取约 H(p) 比特熵),效率远高于朴素冯诺依曼法。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。