3. 37%法则推导:数学推导过程,为什么是1/e?
好,咱们直接进入正题。上一节我们聊了秘书问题的直觉,这一节我们来硬核推导。为什么最优停止比例是37%?为什么是1/e?
说实话,我第一次看到这个结果时,第一反应是:这也太巧了吧?后来自己动手推了一遍,才发现这背后是数学的美。嗯,咱们一步步来。
3.1 问题重述与符号定义
先把问题说清楚。假设有n个候选人,按随机顺序面试。你每次只能决定「要」或「不要」,不能回头。目标是选中最优的那个人。
定义几个符号:
- n:总人数
- k:观察阶段的人数(先看k个,不选)
- r:k/n,即观察比例
- P(k):采用策略「观察前k个,之后选第一个比前k个都好的」时,选中最优的概率
核心思想:我们牺牲前k个作为「样本」,用它们建立标准。之后一旦遇到比样本中所有人都好的,就果断拿下。
3.2 概率公式的建立
现在来算P(k)。这个概率可以拆成两部分:
- 最优的人必须出现在后n-k个中(否则你永远选不到他)
- 在最优的人出现之前,不能有任何人比前k个中的最好者更优
我习惯用条件概率来想这个问题。设最优的人在第i个位置出现(i从1到n)。那么:
- 如果i ≤ k,概率为0 —— 你把他放过了
- 如果i > k,概率为:前k个中最好的人,恰好是全局前i-1个中最好的
为什么?因为如果前k个中最好的人不是全局前i-1个中最好的,那在i之前就会出现一个比前k个都好的候选人,你会提前选错人。
所以,给定最优者在位置i,选中的概率是:
P(选中最优 | 最优在位置i) = k / (i - 1)
这个公式的意思是:前i-1个人中,最好的那个必须落在前k个里。而最好的那个落在前k个的概率,就是k/(i-1)。
于是总的概率:
P(k) = Σ_{i=k+1}^{n} (1/n) × (k / (i-1))
这里1/n是最优者在位置i的概率(均匀分布)。
3.3 从离散到连续:积分近似
上面这个求和,说实话手算很麻烦。当n很大时,我们可以用积分来近似。
令 x = i/n,dx = 1/n。当n→∞时:
P(k) ≈ ∫_{k/n}^{1} (k/n) / x dx
= r × ∫_{r}^{1} (1/x) dx
= r × [ln(x)]_{r}^{1}
= r × (ln(1) - ln(r))
= -r × ln(r)
这里r = k/n。你看,概率变成了一个关于r的函数:P(r) = -r·ln(r)。
我个人经验:很多初学者会卡在这一步。其实你想想看,离散求和变成连续积分,这在量化金融里太常见了。我当年做期权定价时,天天跟这种转换打交道。
3.4 求最大值:为什么是1/e?
好,现在我们有P(r) = -r·ln(r)。要最大化它,求导:
dP/dr = -ln(r) - 1
令导数为0:
-ln(r) - 1 = 0
ln(r) = -1
r = e^{-1} = 1/e ≈ 0.3679
看,37%就这么来了。代入回P(r):
P(1/e) = -(1/e)·ln(1/e) = -(1/e)·(-1) = 1/e ≈ 0.3679
有意思的是,最优概率也是1/e。也就是说,用37%法则,你有37%的概率选到最优。
关键结论:最优停止比例 = 1/e ≈ 37%,此时选中最优的概率 = 1/e ≈ 37%。
3.5 一个直观的SVG图
下面这张图展示了P(r)随r的变化趋势。你可以看到,它在r=0.37附近达到顶峰。
你看,曲线在r=0.37处达到最高点,然后逐渐下降。如果r太小(观察太少),你建立的标准不够可靠;如果r太大(观察太多),你错过了太多候选人,可选空间太小。
3.6 数值验证:用Python算一下
光推导不够,我习惯用代码验证一下。下面这个脚本直接计算离散情况下的最优k:
import numpy as np
def secretary_probability(n, k):
"""计算n个候选人,观察前k个时的最优选择概率"""
prob = 0.0
for i in range(k+1, n+1):
prob += (1/n) * (k / (i-1))
return prob
# 测试不同n值
for n in [10, 50, 100, 1000]:
best_k = 0
best_prob = 0
for k in range(1, n):
p = secretary_probability(n, k)
if p > best_prob:
best_prob = p
best_k = k
print(f"n={n:5d}: 最优k={best_k:4d}, 比例={best_k/n:.3f}, 概率={best_prob:.4f}")
输出结果:
n= 10: 最优k= 3, 比例=0.300, 概率=0.3987
n= 50: 最优k= 18, 比例=0.360, 概率=0.3743
n= 100: 最优k= 37, 比例=0.370, 概率=0.3710
n= 1000: 最优k= 368, 比例=0.368, 概率=0.3682
看到了吗?随着n增大,最优比例越来越接近37%,概率也越来越接近37%。
避坑提醒:我曾经见过有人直接拿37%法则套到n=3的情况,结果发现最优k=1,比例是33%,不是37%。这是因为37%是n→∞时的极限。小样本时,直接用公式算离散值更准。
3.7 为什么是1/e?一个更深的视角
你可能会问:为什么偏偏是1/e?这个数到底有什么特殊之处?
我个人的理解是这样的:e是自然增长的极限。在秘书问题中,你面临的是「信息积累」和「机会消耗」之间的权衡。每多观察一个人,你的信息增加一点,但可选的余地减少一点。这两个力量恰好以e为平衡点。
换个角度想:如果你观察了n/e个人,那么你看到最优的概率是1/e,你错过最优的概率也是1/e。剩下的概率分布在其他位置。这种对称性,其实很优雅。
| 观察比例 r | 选中最优概率 P(r) | 含义 |
|---|---|---|
| 0.1 | 0.230 | 观察太少,标准不可靠 |
| 0.2 | 0.322 | 接近但还不够 |
| 0.37 | 0.368 | 最优平衡点 |
| 0.5 | 0.347 | 观察太多,机会浪费 |
| 0.7 | 0.250 | 可选空间太小 |
| 0.9 | 0.095 | 几乎没得选 |
嗯,到这里你应该明白了。37%法则不是玄学,是数学推导出来的最优解。它告诉我们:在信息不完全的情况下,最好的策略不是追求完美,而是设定一个合理的标准,然后果断执行。
一个小技巧:如果你记不住1/e≈0.3679,可以记成「三分之一多一点」。实际应用中,30%-40%这个区间效果都不差,不必死磕精确的37%。