我在Ruby工作,但我认为这个问题最好被问及语言不可知。可以假设我们可以访问基本列表/数组函数,以及“随机”数字生成器。这是我希望能够做到的:
给定n
个团队的集合,n
偶数,
ROUND 1
。n-2
个后续轮次(ROUND 2
到ROUND n-1
),以便:
我认为完全做到这一点的算法必须众所周知,但作为一个自学成才的编码器,我无法弄清楚如何找到它们。
答案 0 :(得分:2)
我相信你在描述round robin tournament。维基百科页面给出了算法。
如果您需要一种方法来随机化计划,随机化团队订单,循环订单等
答案 1 :(得分:1)
不确定这是否是最有效的算法,但是:
重复i = 1-> (N / 2-1)
对于第2轮> n / 2-1:
答案 2 :(得分:1)
上次我编写循环调度算法时,这个链接对我很有帮助。它包括用于循环配对的第一个拟合算法的C实现。
http://www.devenezia.com/downloads/round-robin/
除了算法之外,他还有一些有用的链接指向锦标赛安排的其他方面(平衡主场和客场比赛,以及跨越场地/球场的轮换球队)。
请注意,在所有情况下,您不一定要在配对中使用“随机”顺序。例如,如果你安排了一场只有6支球队的8场比赛的循环足球联赛,那么每支球队将要两次打两支球队。如果你想为每个人打造一个更加愉快的赛季,你必须开始担心种子问题,这样你就不会让前两支球队在最近两场比赛中击败两支最弱的球队。你最好安排额外的比赛与相似力量/种子队伍配对。
答案 3 :(得分:0)
根据我通过Maniek link找到的信息,我选择了以下内容:
一个简单的循环算法
一个。通过压缩[0,...,(n-1)/2]
和[(n-1)/2 + 1,..., n-1]
来实现配对。 (因此,如果n==10
,我们0
与5
配对,1
与6
配对,等等。
湾顺时针旋转除一支球队外的所有球队,直到所有球队互相比赛为止。 (所以在第2轮,我们将1与6对5,5与7对等)
随机为每个团队分配一个[0,..., n-1]
。