循环赛配对调度器 (锦标赛与 1对1 轮换)
随机
当 N 人需要跨多轮配对时 — 代码评审搭档、辩论锦标赛、对练伙伴、1对1 导师轮换、黑客松破冰、棋类联赛 — 问题都一样: 如何用最少轮数保证每个人都与每个人恰好相遇一次? 答案是循环赛, 经典构造法是圆圈法: 固定一位参与者, 其他人围绕他/她旋转, 沿直径读取配对。对偶数 N 人, 这会产生 N-1 轮, 每轮 N/2 个同时进行的配对, 完全覆盖所有 N(N-1)/2 个唯一配对, 各一次。N 为奇数时, 添加一个虚拟 Bye 位让某人每轮轮休。本工具直接执行该构造: 粘贴名字, 即得一张按轮次的表格和按参与者的视图。初始顺序可选字母序 (可复现) 或带种子的随机 (重抽看不同布局)。一切都在你的浏览器中, 不外发。
—
顺序:
视图:
参与者数
6
轮数
5
配对总数
15
轮次 1
- 对局 1Eve↔Dave
- 对局 2Bob↔Alice
- 对局 3Frank↔Carol
轮次 2
- 对局 1Eve↔Alice
- 对局 2Dave↔Carol
- 对局 3Bob↔Frank
轮次 3
- 对局 1Eve↔Carol
- 对局 2Alice↔Frank
- 对局 3Dave↔Bob
轮次 4
- 对局 1Eve↔Frank
- 对局 2Carol↔Bob
- 对局 3Alice↔Dave
轮次 5
- 对局 1Eve↔Bob
- 对局 2Frank↔Dave
- 对局 3Carol↔Alice
赛程是如何构造的
经典圆圈法: 固定一位, 其余顺时针旋转, 沿直径成对。N (偶数) 参与者产生 N-1 轮 × N/2 场对局, 全 C(N,2) 个唯一配对各一次。计算完全本地 — 参与者姓名不会离开你的浏览器。
使用方法
- 粘贴参与者姓名 — 每行一个或逗号分隔。
- 选择字母序 (可复现) 或随机 (带种子 — 重抽看新布局)。
- 在「按轮次」 与 「按参与者」 视图间切换。
- 奇数人数会获得一个 (Bye) 位 — 该人休息一轮。
- 使用「复制为 Markdown」 将完整赛程粘到文档或 PR 描述中。
常见问题
- 圆圈法是什么?
- 将 N 位参与者排成圆圈。固定参与者 1。每一轮沿直径画弦取对: (1,N)、(2,N-1)、(3,N-2)…。然后除参与者 1 外, 所有人顺时针旋转一位, 重复。N-1 轮后, 每对都恰好相遇一次。这是锦标赛调度与图论中的标准构造 (完全图 Kn 分解为完美匹配)。
- 如何处理奇数人数?
- N 为奇数时不存在完美匹配 — 每轮必须有人轮休。工具添加虚拟 '(Bye)' 位将人数变为偶数, 然后跑标准圆圈法。N 轮中, 每位真实参与者恰好得到一次 bye。Bye 公平轮转 — 不会出现某人休息两次而另一人从不休息的情况。
- 和你的 Group Maker / Secret Santa 工具有何不同?
- Group Maker 一次将 N 人切分为 K 个 disjoint 小组 — 适用于分组讨论或选队。Secret Santa 构建单次循环送礼 (A→B→C→A)。Round-Robin Scheduler 构建跨时间的整张对阵图 — N-1 轮, 每轮都是完美匹配, 全 C(N,2) 个无序配对各覆盖一次。需要「轮换」 而非「一次性分配」 时用这个。
- 之后能再现某个特定赛程吗?
- 可以。随机顺序带种子 — 种子存于可分享 URL 的状态中, 重新加载工具即重现同一布局。如需完全确定性输出, 切换到字母序; 相同输入永远产出相同赛程。