量化面试绿皮书:21. 抛硬币游戏

发布于:2025-06-21 ⋅ 阅读:(13) ⋅ 点赞:(0)

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

21. 抛硬币游戏

两个赌徒正在玩一个抛硬币游戏。
赌徒A有(n+1)枚均匀硬币,赌徒B有n枚均匀硬币。

Q: 如果两人同时抛掷所有硬币,A得到的正面朝上的次数比B多的概率是多少?

A: 两个赌徒分别抛掷硬币:赌徒A有 n + 1 n+1 n+1枚均匀硬币,赌徒B有 n n n枚均匀硬币。每枚硬币正面朝上的概率均为 1 2 \frac{1}{2} 21,反面朝上的概率也为 1 2 \frac{1}{2} 21,且所有硬币抛掷相互独立。

X X X为A得到的正面朝上次数, Y Y Y为B得到的正面朝上次数。 X X X服从二项分布 Bin ( n + 1 , 1 2 ) \text{Bin}(n+1, \frac{1}{2}) Bin(n+1,21) Y Y Y服从二项分布 Bin ( n , 1 2 ) \text{Bin}(n, \frac{1}{2}) Bin(n,21),且 X X X Y Y Y独立。需要求 P ( X > Y ) P(X > Y) P(X>Y)

考虑A的硬币:将A的硬币分为两组,一组为 n n n枚硬币(与B的硬币数量相同),另一组为一枚额外硬币。设 X ′ X' X为A的前 n n n枚硬币的正面朝上次数,则 X ′ ∼ Bin ( n , 1 2 ) X' \sim \text{Bin}(n, \frac{1}{2}) XBin(n,21),且与 Y Y Y独立同分布。设 I I I为额外硬币的正面朝上指示变量(即 I = 1 I = 1 I=1表示正面, I = 0 I = 0 I=0表示反面),则 I ∼ Bernoulli ( 1 2 ) I \sim \text{Bernoulli}(\frac{1}{2}) IBernoulli(21),且与 X ′ X' X Y Y Y独立。因此, X = X ′ + I X = X' + I X=X+I.

于是,

P ( X > Y ) = P ( X ′ + I > Y ) . P(X > Y) = P(X' + I > Y). P(X>Y)=P(X+I>Y).

根据 I I I的值分情况讨论:

  • I = 1 I = 1 I=1,则 X = X ′ + 1 X = X' + 1 X=X+1,所以 X > Y X > Y X>Y当且仅当 X ′ ≥ Y X' \geq Y XY(因为 X ′ X' X Y Y Y取整数值)。
  • I = 0 I = 0 I=0,则 X = X ′ X = X' X=X,所以 X > Y X > Y X>Y当且仅当 X ′ > Y X' > Y X>Y.

因此,

P ( X > Y ) = P ( I = 1 ) P ( X ′ ≥ Y ) + P ( I = 0 ) P ( X ′ > Y ) . P(X > Y) = P(I = 1) P(X' \geq Y) + P(I = 0) P(X' > Y). P(X>Y)=P(I=1)P(XY)+P(I=0)P(X>Y).

由于 P ( I = 1 ) = 1 2 P(I = 1) = \frac{1}{2} P(I=1)=21 P ( I = 0 ) = 1 2 P(I = 0) = \frac{1}{2} P(I=0)=21,代入得

P ( X > Y ) = 1 2 [ P ( X ′ ≥ Y ) + P ( X ′ > Y ) ] . P(X > Y) = \frac{1}{2} \left[ P(X' \geq Y) + P(X' > Y) \right]. P(X>Y)=21[P(XY)+P(X>Y)].

因为 X ′ X' X Y Y Y独立同分布,有 P ( X ′ > Y ) = P ( X ′ < Y ) P(X' > Y) = P(X' < Y) P(X>Y)=P(X<Y)(由对称性),且 P ( X ′ > Y ) + P ( X ′ < Y ) + P ( X ′ = Y ) = 1 P(X' > Y) + P(X' < Y) + P(X' = Y) = 1 P(X>Y)+P(X<Y)+P(X=Y)=1,所以

2 P ( X ′ > Y ) + P ( X ′ = Y ) = 1. 2P(X' > Y) + P(X' = Y) = 1. 2P(X>Y)+P(X=Y)=1.

P ( X ′ ≥ Y ) = P ( X ′ > Y ) + P ( X ′ = Y ) , P(X' \geq Y) = P(X' > Y) + P(X' = Y), P(XY)=P(X>Y)+P(X=Y),

因此

P ( X ′ ≥ Y ) + P ( X ′ > Y ) = [ P ( X ′ > Y ) + P ( X ′ = Y ) ] + P ( X ′ > Y ) = 2 P ( X ′ > Y ) + P ( X ′ = Y ) = 1. \begin{align*} P(X' \geq Y) + P(X' > Y) &= [P(X' > Y) + P(X' = Y)] + P(X' > Y) \\ &= 2P(X' > Y) + P(X' = Y) \\ &= 1. \end{align*} P(XY)+P(X>Y)=[P(X>Y)+P(X=Y)]+P(X>Y)=2P(X>Y)+P(X=Y)=1.

代入原式得

P ( X > Y ) = 1 2 × 1 = 1 2 . P(X > Y) = \frac{1}{2} \times 1 = \frac{1}{2}. P(X>Y)=21×1=21.

此结果与 n n n无关,且已验证于小值 n n n(如 n = 0 , 1 , 2 , 3 n=0,1,2,3 n=0,1,2,3)均成立。因此,A得到的正面朝上次数比B多的概率恒为:

1 2 \boxed{\dfrac{1}{2}} 21

Python 实现

根据概率论分析,该概率恒为 0.5 0.5 0.5,与 n n n无关。

import random


def coin_toss_probability(n: int, trials: int = 100000) -> float:
    """计算A比B得到更多正面朝上的概率(理论值1/2,模拟值用于验证)

    根据概率论推导,理论概率恒为1/2。模拟实验用于验证该理论值。

    Args:
        n (int): 赌徒B的硬币数量,赌徒A有n+1枚硬币
        trials (int, optional): 模拟实验次数. Defaults to 100000.

    Raises:
        ValueError: 如果n或trials为负数

    Returns:
        float: 理论概率值0.5
    """
    # 参数验证
    if n < 0 or trials < 0:
        raise ValueError("n and trials must be non-negative integers")

    # 理论概率恒为0.5(与n无关)
    theoretical_prob = 0.5

    # 可选:进行模拟实验验证(实际应用中可直接返回理论值)
    success_count = 0
    for _ in range(trials):
        # 模拟A的n+1枚硬币抛掷(0=反面,1=正面)
        a_result = sum(random.choices([0, 1], k=n + 1))
        # 模拟B的n枚硬币抛掷
        b_result = sum(random.choices([0, 1], k=n))

        if a_result > b_result:
            success_count += 1

    simulated_prob = success_count / trials
    print(f"理论概率: 0.5, 模拟概率(n={n}, trials={trials}): {simulated_prob}")

    return theoretical_prob


# 测试不同n值
for n in [0, 5, 100]:
    probability = coin_toss_probability(n, trials=50000)
    print(f"n = {n}: 概率 = {probability}\n")

代码说明

  1. 核心逻辑

    • 理论值直接返回 0.5 0.5 0.5(基于概率论证明)
    • 使用random.choices高效生成抛硬币结果
    • 通过求和快速计算正面朝上的次数
  2. 验证机制

    • 可选模拟实验验证理论值
    • 打印理论值和模拟值的对比
    • 参数验证防止非法输入

输出示例

理论概率: 0.5, 模拟概率(n=0, trials=50000): 0.50028
n = 0: 概率 = 0.5

理论概率: 0.5, 模拟概率(n=5, trials=50000): 0.4972
n = 5: 概率 = 0.5

理论概率: 0.5, 模拟概率(n=100, trials=50000): 0.49974
n = 100: 概率 = 0.5

数学解释

无论n取何值,概率恒为 0.5 0.5 0.5,因为:

  • 将A的硬币分为1枚特殊硬币 + n枚普通硬币
  • 特殊硬币的结果(正/反)概率各 0.5 0.5 0.5
  • 当特殊硬币为正面时,只需A的n枚 ≥ B的n枚
  • 当特殊硬币为反面时,只需A的n枚 > B的n枚
  • 由对称性: P ( A n ≥ B n ) + P ( A n > B n ) = 1 P(A_n \geq B_n) + P(A_n > B_n) = 1 P(AnBn)+P(An>Bn)=1
  • 最终概率: 0.5 × [ P ( A n ≥ B n ) + P ( A n > B n ) ] = 0.5 × 1 = 0.5 0.5 \times [P(A_n \geq B_n) + P(A_n > B_n)] = 0.5 \times 1 = 0.5 0.5×[P(AnBn)+P(An>Bn)]=0.5×1=0.5

这道面试题的本质是考察候选人将随机过程建模为概率问题的能力利用数学对称性优化复杂计算的思维,这类能力直接对应量化金融中的衍生品定价、统计套利策略设计和风险管理系统的核心挑战。

🔑 核心知识点

  1. 概率建模
    • 二项分布的应用(硬币抛掷 → Binomial分布)
    • 独立随机变量的联合概率计算( X A ∼ B i n ( n + 1 , p ) , X B ∼ B i n ( n , p ) X_A \sim Bin(n+1, p), \quad X_B \sim Bin(n, p) XABin(n+1,p),XBBin(n,p)
  2. 数学优化
    • 对称性分析( P ( X A > X B ) = P ( X B > X A ) + 调整项 P(X_A > X_B) = P(X_B > X_A) + \text{调整项} P(XA>XB)=P(XB>XA)+调整项
    • 变量分解技巧(将A的n+1枚拆分为n枚 + 1枚)
  3. 数值验证方法
    • 蒙特卡洛模拟设计(大数定律验证理论值)
  4. 边界条件处理
    • 极端场景分析(如 n=0 时 A 必然有硬币而 B 无硬币)

📊 面试评估维度

考察维度 具体表现要求 本题对应点
数学抽象能力 将现实问题转化为概率模型 将硬币游戏映射为二项分布随机变量比较
分析简化能力 识别并利用对称性降低复杂度 通过分解额外硬币将问题转化为 P(X’≥Y) 和 P(X’>Y) 的线性组合
计算严谨性 处理边界条件和极端案例 验证 n=0 时 P(A>B)=0.5(A有1枚硬币,B无硬币)
编程实现能力 将数学模型转化为高效代码 用蒙特卡洛模拟验证理论解,避免暴力计算组合数
金融直觉 理解随机性在金融场景的意义 类似期权定价中波动率对概率分布的影响

🧩 典型回答框架

  1. 问题定义

    X A ∼ B i n ( n + 1 , 0.5 ) , X B ∼ B i n ( n , 0.5 ) , 求  P ( X A > X B ) X_A \sim Bin(n+1, 0.5), \quad X_B \sim Bin(n, 0.5), \quad \text{求 } P(X_A > X_B) XABin(n+1,0.5),XBBin(n,0.5), P(XA>XB)

  2. 关键分解

    • 将A的硬币分为两组:
      • 标准组 X’ ~ Bin(n, 0.5)(与B同分布)
      • 额外硬币 I ~ Bernoulli(0.5)
  3. 条件概率展开

    P ( X A > X B ) = P ( I = 1 ) P ( X ′ ≥ X B ) + P ( I = 0 ) P ( X ′ > X B ) = 1 2 [ P ( X ′ ≥ X B ) + P ( X ′ > X B ) ⏟ = 1 ] \begin{align*} P(X_A > X_B) &= P(I=1)P(X' \geq X_B) + P(I=0)P(X' > X_B) \\ &= \frac{1}{2} [ \underbrace{P(X' \geq X_B) + P(X' > X_B)}_{=1} ] \end{align*} P(XA>XB)=P(I=1)P(XXB)+P(I=0)P(X>XB)=21[=1 P(XXB)+P(X>XB)]

  4. 对称性证明

    • 由 X’ 与 X_B 独立同分布:

      P ( X ′ > X B ) = P ( X ′ < X B ) P(X' > X_B) = P(X' < X_B) P(X>XB)=P(X<XB)

    • 推导核心等式:

      P ( X ′ ≥ X B ) + P ( X ′ > X B ) = 1 P(X' \geq X_B) + P(X' > X_B) = 1 P(XXB)+P(X>XB)=1

  5. 最终结论

    P ( X A > X B ) = 1 2 × 1 = 0.5 P(X_A > X_B) = \frac{1}{2} \times 1 = 0.5 P(XA>XB)=21×1=0.5

💡 核心洞察

在量化金融中,此类问题的深层价值在于训练候选人在随机系统中发现确定性规律的能力,尽管硬币结果具有随机性,但A的胜率恒为50%,这与金融市场的核心逻辑高度一致:

  • 类似期权定价:如同Black-Scholes模型中,波动率增加但多空头寸的期望收益仍可精确计算
  • 风控启示:即使存在随机性(如市场波动),通过数学建模仍可提取确定性结论(如对冲比率)
  • 策略设计:高频交易中利用短期统计套利机会时,需快速识别此类"概率优势"的确定性边界

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。


网站公告

今日签到

点亮在社区的每一天
去签到