写锦标赛对阵引擎学到的边界情况:种子、轮空与重赛
来源:dev.to — 2026-11-05
📋 概述
作者给本地体育俱乐部做了免费对阵生成器 Rollare,本以为难点是在屏幕上画出漂亮的赛程图,结果真正耗掉最多迭代的是对阵之外的规则。种子排位不是排序:朴素的 1v2、3v4 配对会让头两号种子在半决赛就相遇,标准做法是首轮一号对末位,把规模补到 2 的幂,并且轮空位必须给高顺位种子;循环赛的圆桌法在奇数队伍、双循环主客转换、同组重复赛程上都会翻车,去重必须在小组层面做而不是赛事层面;瑞士制同时要求同分配对和绝不重赛,本质变成了图匹配问题,他选择确定性策略而非最优解,因为组织者要的是结果可解释;双败淘汰的决赛要打「重置赛」,因此比赛状态必须挂在比赛上,而不是把整届赛事建模成一条流水线;最后,胜负关系成环时必须有开赛前就写明的兜底顺序。
🔑 核心要点
- 种子排位不是排序:1v2、3v4 的朴素配对会让一号和二号种子在半决赛相遇,标准首轮是一号对末位。
- 队伍数不是 2 的幂时要补位,而且轮空必须给最高种子,绝不能随机分配。
- 瑞士制要同时满足同分配对与绝不重赛,就成了图匹配问题;作者宁可要确定性策略也不要最优解。
- 双败淘汰的胜者组一方首次落败要打「重置赛」,所以比赛状态必须挂在比赛上,不能建模成一条流水线。
- 胜负成环(A 胜 B、B 胜 C、C 胜 A)时,必须先定义兜底顺序:净胜分、总得分,再到掷币程序。
💡 金句
“Deterministic beats optimal — organizers care that the result is explainable.”
译:确定性胜过最优——组织者在意的是结果能不能解释清楚。
👍 0
👎 0
← 返回 dev.to 首页