赛马问题:25 匹马 5 条跑道,找前三需 7 场
一句话结论(30s)
结论先行:25 匹马 5 条跑道找前三,最少 7 场。本质是”分组缩小候选集”——因为先 5 场分组赛排出组内名次,再 1 场冠军赛锁定全局第一,然后靠淘汰逻辑把候选压缩到恰好 5 匹,最后 1 场决赛解决余量。
核心原理(2min)
5 场分组赛后,取每组头名 A1、B1、C1、D1、E1 赛第 6 场(冠军赛),A1 必为全局第一。第二名只能在 A2(同组输给 A1)与 B1(冠军赛输给 A1)中产生,第三名候选为 A2、A3、B1、B2、C1。关键淘汰逻辑:冠军赛排第 4、5 的 D1、E1 及其整组全部淘汰,C 组也只保留 C1,因为任何被淘汰的马前面都站着两个以上确定的更快的马,不可能进前三。最终恰好剩 5 匹候选,第 7 场取前两名加 A1 即得前三。
底层深入(5-10min)
问题
25 匹马,跑道同时只能跑 5 匹(没有计时器,只有名次)。最少比几场能确定最快的 3 匹?
步骤一:分组赛(5 场)
25 匹马分成 5 组,每组 5 匹,各比一场:
A组: A1 > A2 > A3 > A4 > A5
B组: B1 > B2 > B3 > B4 > B5
C组: C1 > C2 > C3 > C4 > C5
D组: D1 > D2 > D3 > D4 > D5
E组: E1 > E2 > E3 > E4 > E5
💭 思考:为什么第一步是先分组赛?——因为跑道一次只能跑 5 匹、且没有计时器,快慢只能靠两两比赛的相对名次传递;先把 25 匹拆成 5 组比,才能拿到组内名次,为后续”跨组比较”提供依据。
步骤二:冠军赛(第 6 场)
5 个组的第一名比一场:A1, B1, C1, D1, E1
结果(假设):A1 > B1 > C1 > D1 > E1
A1 是全 25 匹马中最快的(所有比的、没比的,A1 都赢过)。
💭 思考:为什么 A1 一定是全局第一?——因为 A1 赢过同组 A2
A5,又在冠军赛赢了各组第一 B1E1;而其他任何马要么输给它的组内第一、要么就是它的组内第一,传递性保证 A1 比所有马都快。
步骤三:淘汰分析
淘汰推理:
A1 是最快的 ✓
第二名候选: A2(同组输给 A1),B1(冠军赛输给 A1)
→ D1, E1 被淘汰(冠军赛排第4、5,不可能前3)
第三名候选: A2, B1, A3, B2, C1
→ C2-C5, D2-D5, E2-E5 全被淘汰(同组有比它们快的,且那些比它们快的已经排到了冠军赛第3或更后)
关键淘汰逻辑:如果一匹马所在的组有两个比它快的马,且这两个比它快的已经在冠军赛中排到第二或第三,那这匹马不可能进前三。
💭 思考:为什么 D1、E1 及 D、E 整组都要淘汰?——因为 D1、E1 在冠军赛已经输给 A1、B1、C1 三匹,前面站着至少 3 匹更快的马,绝无进前三的可能;组内更慢的 D2
D5、E2E5 更是如此。
步骤四:最终决赛(第 7 场)
候选者:A2, A3, B1, B2, C1(恰好 5 匹)
这 5 匹赛第 7 场 → 结果排序 → 取前 2 + 已知的 A1 = 前三名。
总计 7 场。
💭 思考:为什么总场数是 7 而不是 6 或 8?——因为 5 场分组 + 1 场冠军赛是锁定第一的必需成本(6 场只能定出第一名),而二三名的 5 个候选必须再比一场才能排出顺序,所以 7 场是下限。
推广:其他数量的赛马
| 马 | 跑道 | 前 K 名 | 最少场次 |
|---|---|---|---|
| 25 | 5 | 3 | 7 |
| 25 | 5 | 1 | 6(每组第一比冠军赛即可) |
| 64 | 8 | 4 | 11 |
核心思想:用分组缩小候选范围,用冠军赛锁定第一,用淘汰逻辑压缩候选集,最后决赛解决余量。
章末提问
追问 1:为什么是 7 场,能再少吗?
回答思路:结论是不能少于 7 场,因为 5 场分组赛排出组内名次是必须的,第 6 场冠军赛才能锁定全局第一(此时只定了第一名),二三名的 5 个候选仍需第 7 场才能排出顺序,所以 7 场是下限。
追问 2:为什么 D 组、E 组的马要整组淘汰?
回答思路:结论是它们不可能进前三,因为 D1、E1 在冠军赛已输给 A1、B1、C1 三匹更快的马,连组内第一都进不了前三,组内更慢的马更不可能;淘汰标准是”前面是否站着至少两匹确定的更快的马”。
追问 3:第二名为什么只能在 A2 和 B1 中产生?
回答思路:结论是除 A1 外没有马能排在 A2 或 B1 之前进前二——A2 是 A 组第二(只输 A1),B1 是冠军赛第二(只输 A1),其余组第一 C1、D1、E1 都输给了 B1,组内其他马更慢,所以第二名的候选只有 A2、B1。