博弈论解题框架:海盗分金与毒药问题

上周复盘会上,有个学员跟我抱怨:面试官问了一道"五个海盗分金币"的问题,他想了五分钟没想出来,最后硬着头皮瞎猜了一个答案。

我问他:"你猜的什么?"

他说:"我猜是97、0、1、0、2。"

我问他为什么这么分,他说:"直觉。"

这道题我面试过上百个候选人,能完整推导出来的不到20%。今天把博弈论最经典的两道题彻底讲透。

一、海盗分金:逆向归纳的经典教材 🔴

1.1 问题拆解

标准问题:

5个海盗抢了100枚金币,要分赃。分配规则是:先由1号海盗提出分配方案,如果超过一半的人反对,他就得死,剩下的人继续按顺序提方案。以此类推。假设每个海盗都足够聪明,会优先保命,其次追求利益最大化。问:1号海盗该怎么分配?

1.2 ❌ 错误示范

候选人原话:"我猜1号海盗应该给自己多分一点,毕竟他是提方案的人..."

问题诊断

  • 完全没理解博弈论的核心——要倒着推
  • 把"聪明"理解成"贪婪",实际上聪明海盗的第一目标是保命
  • 没有考虑后面海盗的预期行为

面试官内心 OS:"这种题上来就猜答案的,说明根本没学过博弈论的基本方法。" :::

1.3 标准回答

核心方法:逆向归纳法——从最后一种情况往前倒推。

第一步:只剩5号海盗 如果只剩下5号,他可以拿走全部100枚金币。因为前面的人都死了,他自己就是多数。

第二步:4号海盗的处境 4号知道,如果自己死了,5号就能拿走全部。所以4号只需要给自己投赞成票,就能活。那么4号的方案可以是:

  • 4号:100枚,5号:0枚

4号必死。

第三步:3号海盗的处境 3号知道,4号必死后会投反对票(因为4号会投100、0),所以他需要争取5号的支持。

  • 3号:99枚,4号:0枚,5号:1枚

如果3号死了,5号只能拿到1枚,所以5号会支持3号。3号方案通过。

第四步:2号海盗的处境 2号需要争取2票反对自己才能活(超过半数反对才死)。

  • 3号会投反对票(因为2号死了他拿99)
  • 4号支持(因为2号死了他0枚,现在能拿1枚)
  • 5号支持(因为2号死了他1枚,现在能拿2枚)

所以2号的方案:

  • 2号:97枚,3号:0枚,4号:1枚,5号:2枚

通过!

第五步:1号海盗的处境 1号需要争取3票支持。他可以拉拢4号和5号:

  • 2号:0枚(2号死了能拿97枚,所以2号必反对)
  • 3号:1枚(3号现在能拿99枚,但1号死了他只能拿1枚,所以1枚就能收买)
  • 4号:0枚(4号在2号方案里能拿1枚,1号死了能拿1枚,区别不大)
  • 5号:2枚(5号在2号方案里能拿2枚,现在也是2枚,有影响)

等等,这样只有2票支持。重新算:

1号方案:

  • 1号:98枚,2号:0枚,3号:1枚,4号:0枚,5号:1枚

3号:1枚 vs 0枚(收买) 5号:1枚 vs 2枚(亏了)

拉拢失败。

再试:

  • 1号:97枚,2号:0枚,3号:1枚,4号:2枚,5号:0枚

3号:1枚(收买) 4号:2枚 vs 1枚(收买) 5号:0枚 vs 2枚(亏)

还是只有2票。

正确分配

  • 1号:98枚,2号:0枚,3号:0枚,4号:1枚,5号:1枚

4号:1枚 vs 0枚(收买) 5号:1枚 vs 0枚(收买)

赞成票:4号、5号、1号自己 = 3票,通过!

1.4 最终答案

海盗1号2号3号4号5号
分配980011
💡

记住这个结论:1号海盗能活下来并拿走98枚金币,代价是放弃2、3号,收买4号和5号。核心逻辑是"谁会投反对票"和"收买谁最便宜"。

1.5 追问升级

追问1:如果规则改成"超过一半的人赞成才能通过"呢?

答:那就需要3票赞成。1号必须同时拉拢3、4、5号中的至少两个。

追问2:如果5个海盗都是"宁可同归于尽也要让别人拿不到"的性格呢?

答:那就进入了"死循环博弈",所有方案都不会通过,因为每个人都会投反对票。

【面试官手记】 这道题能完整推导出来的候选人,我基本都会给P7的入场券。因为他展现了两种关键能力:一是逆向思维的框架,二是把复杂问题拆成简单步骤的耐心。 :::

二、毒药问题:老鼠试毒的变种 🔴

2.1 问题拆解

经典问题:

有1000瓶酒,其中一瓶有毒。毒酒喝下去会在一周后死亡。现在给你10只老鼠,一周时间,如何找出那瓶毒酒?

2.2 ❌ 错误示范

候选人原话:"让老鼠一只一只地喝,死了的那只喝的酒就是有毒的..."

问题诊断

  • 10只老鼠只能标记10瓶酒,怎么标记1000瓶?
  • 没有利用二进制编码的思路
  • 只想到线性方案没想到指数级方案

面试官内心 OS:"这道题其实有很优雅的数学解法,只会逐个试的候选人,说明思维还不够发散。" :::

2.3 标准回答

核心思想:二进制编码

把1000瓶酒用0到999编号,转成二进制:

第1瓶 = 0000000001
第2瓶 = 0000000010
第3瓶 = 0000000011
...
第1000瓶 = 1111101000

10只老鼠,每只对应二进制的一位。

给老鼠喂酒的原则:

  • 第1只老鼠喝所有二进制第1位是1的酒
  • 第2只老鼠喝所有二进制第2位是1的酒
  • ...
  • 第10只老鼠喝所有二进制第10位是1的酒

一周后,观察哪些老鼠死了:

  • 死了的老鼠标记为1
  • 活着的老鼠标记为0

得到的二进制数就是毒酒的编号。

举例: 如果老鼠1、3、5死了,老鼠2、4、6、7、8、9、10活着:

活着 = 0,死了 = 1
老鼠顺序从1到10:1,0,1,0,1,0,0,0,0,0
转成十进制 = 0101010000₂ = 336

第336瓶酒有毒!

2.4 追问升级

追问1:n只老鼠能测多少瓶酒?

答:2^n 瓶。10只老鼠能测 2^10 = 1024 瓶,所以1000瓶够用。

追问2:如果是两瓶毒酒呢?

答:需要把问题升级为"哪些瓶子会让老鼠死亡",每个老鼠有三种状态(没喝毒酒、喝了第一瓶毒酒、喝了第二瓶毒酒),可以用三进制或信息论的方法扩展。

【面试官手记】 有个学员答对了二进制编码,但被追问"为什么用二进制而不是十进制"时答不上来。我告诉他:二进制只需要考虑"喝/不喝"两种状态,最简单。十进制要考虑的状态太多,喂老鼠的操作会复杂得多。 :::

三、囚徒困境:合作与背叛的永恒博弈 🟡

3.1 问题拆解

两个嫌疑人被抓,分别关押。检察官告诉他们:如果两人都坦白,各判5年;如果两人都抵赖,各判1年;如果一人坦白、一人抵赖,坦白的无罪释放,抵赖的判10年。问:两人会怎么选?

3.2 ❌ 错误示范

候选人原话:"他们应该都抵赖,这样总体判刑最少。"

问题诊断

  • 用集体最优来代替个人最优
  • 忽略了"理性人"假设——每个人都会选择对自己最有利的
  • 没有意识到"背叛"是占优策略

面试官内心 OS:"这道题考的是你对Nash均衡的理解,不是让你当道德楷模。" :::

3.3 标准回答

站在A的角度分析

  • 如果B坦白:A坦白 = 5年,A抵赖 = 10年 → 坦白更好
  • 如果B抵赖:A坦白 = 0年,A抵赖 = 1年 → 坦白更好

无论B怎么选,坦白都是A的占优策略

同理,B也会选择坦白。

所以Nash均衡是(坦白,坦白),各判5年。

⚠️

这个结果对集体来说不是最优的(集体最优是抵赖,各1年),但对个人来说是最优的。这就是"囚徒困境"的核心矛盾——个体理性与集体理性的冲突。

3.4 追问升级

追问1:怎么打破囚徒困境?

答:重复博弈。如果两人知道会多次被抓,就会倾向于合作(抵赖)。

追问2:在系统设计中,怎么利用囚徒困境?

答:设计激励时,让合作收益大于背叛收益。比如"赏金猎人"机制——举报坏人的人可以获得奖励,而坏人如果不自首,一旦被举报就会双重惩罚。

【面试官手记】 我通常用这道题测试候选人对"博弈论基础概念"的理解。能说出Nash均衡和占优策略的,至少是P6水平。能联想到系统设计的,是P7苗子。 :::

四、博弈问题万能公式

问题类型核心方法关键点
海盗分金逆向归纳法从最后一人往前推
毒酒问题二进制编码10只老鼠测1000瓶
囚徒困境占优策略分析找Nash均衡
硬币问题对称性/极值法找必胜策略
💡

博弈论问题的核心就一句话:谁在什么信息下会做什么选择。把这个问题回答清楚,博弈论就懂了。

五、生产避坑

有人问:博弈论和写代码有什么关系?

场景1:分布式系统的一致性 Paxos/Raft协议本质上就是多人博弈——多个节点要在不完全信任的情况下达成共识。

场景2:微服务拆分后的利益分配 如果订单服务拆出来独立了,它和其他服务的交互就变成了博弈——每个服务都想最小化自己的成本。

场景3:缓存一致性策略 缓存和数据源的更新博弈——是删除缓存还是更新缓存?各有各的占优策略。

【面试官手记】 能把博弈论和分布式系统联系起来的候选人,我都高看一眼。因为这说明他不只是做题,而是在思考真实系统的设计逻辑。 :::

六、工程选型

遇到博弈类面试题,记住"三步走":

第一步:确定参与者 有哪几方在博弈?每个人追求什么目标?

第二步:列出收益矩阵 每个人的每个选择会带来什么结果?收益是多少?

第三步:找均衡点 什么是占优策略?什么是Nash均衡?

级别期望回答判分标准
P5能正确推导海盗分金的答案逆向归纳法步骤正确
P6能解释毒酒问题的二进制编码原理理解编码和信息量
P7能把博弈论和系统设计联系起来有工程视角,能落地