3路/4路循环赛调度算法
Posted
技术标签:
【中文标题】3路/4路循环赛调度算法【英文标题】:3-way / 4-way round-robin tournament scheduling algorithm 【发布时间】:2019-01-08 20:52:59 【问题描述】:我想创建/实现一个锦标赛调度算法,该算法能够处理每场比赛超过 2 名参与者。
2 名参与者似乎都知道这个问题。例如,请参见此处:Round Robin Algorithm Implementation Java
与 6 支球队(A、B、C、D、E、F)的比赛示例:
-
(ABC)(DEF)
(ABD)(CEF)
(ABE)(CDF)
(ABF)(CDE)
(ACD)(BEF)
(ACE)(BDF)
(ACF)(BDE)
(ADE)(BEF)
(ADF)(公元前)
(AEF)(BCD)
如果球队数量为奇数(即 A、B、C、D、E),我希望每轮进行 3 路和 2 路比赛:(ABC)(DE)
一旦解决了 3-way 问题,我想对 4-way 游戏做同样的事情。
我无法创建这样的算法,也无法在互联网上找到类似的解决方案。
有人能指出我正确的方向吗?
【问题讨论】:
【参考方案1】:要从 N 中选择 K 项,您需要combinations。
请注意 C(6,3)=20
但您确实修复了一项 (A) 并且确实有 C(5,2)=10
变体
组合生成的实现有很多——最简单的是recursive,更有效的是lexicographic ordered generation -simple C code
【讨论】:
感谢您的参考。我不确定我是否真的修复了一项 (A)。我就是这么整理的。我的编号列表代表可以同时进行 2 场比赛的“回合”。每场比赛都用括号中的球队表示,所以我实际上有 2x10=20 个项目,对吧? 第一组的集合定义了第二组的集合,所以它们(20项)不是独立的。关于修复:使用BCDEF集合生成组合(5,2),然后将A添加到两个项目的组合中。以上是关于3路/4路循环赛调度算法的主要内容,如果未能解决你的问题,请参考以下文章