博弈论解题框架:海盗分金与毒药问题
上周复盘会上,有个学员跟我抱怨:面试官问了一道"五个海盗分金币"的问题,他想了五分钟没想出来,最后硬着头皮瞎猜了一个答案。
我问他:"你猜的什么?"
他说:"我猜是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号海盗能活下来并拿走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编号,转成二进制:
10只老鼠,每只对应二进制的一位。
给老鼠喂酒的原则:
- 第1只老鼠喝所有二进制第1位是1的酒
- 第2只老鼠喝所有二进制第2位是1的酒
- ...
- 第10只老鼠喝所有二进制第10位是1的酒
一周后,观察哪些老鼠死了:
- 死了的老鼠标记为1
- 活着的老鼠标记为0
得到的二进制数就是毒酒的编号。
举例: 如果老鼠1、3、5死了,老鼠2、4、6、7、8、9、10活着:
第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苗子。 :::
四、博弈问题万能公式
博弈论问题的核心就一句话:谁在什么信息下会做什么选择。把这个问题回答清楚,博弈论就懂了。
五、生产避坑
有人问:博弈论和写代码有什么关系?
场景1:分布式系统的一致性 Paxos/Raft协议本质上就是多人博弈——多个节点要在不完全信任的情况下达成共识。
场景2:微服务拆分后的利益分配 如果订单服务拆出来独立了,它和其他服务的交互就变成了博弈——每个服务都想最小化自己的成本。
场景3:缓存一致性策略 缓存和数据源的更新博弈——是删除缓存还是更新缓存?各有各的占优策略。
【面试官手记】 能把博弈论和分布式系统联系起来的候选人,我都高看一眼。因为这说明他不只是做题,而是在思考真实系统的设计逻辑。 :::
六、工程选型
遇到博弈类面试题,记住"三步走":
第一步:确定参与者 有哪几方在博弈?每个人追求什么目标?
第二步:列出收益矩阵 每个人的每个选择会带来什么结果?收益是多少?
第三步:找均衡点 什么是占优策略?什么是Nash均衡?