对非重复的团队进行排序循环赛锦标赛

时间:2016-04-20 22:04:36

标签: algorithm sorting

我为锦标赛制作了赛程。每支球队应该打8场比赛。团队数量2< n< 36

为了将团队分成对,我使用循环算法来获得一个表,例如6个团队:

然后我把它转换成一对对:

1   4
2   3
3   2
4   1
5   6
6   5
1   2
2   1
3   5
4   6
5   3
6   4
...

问题是如何对这个集进行排序,以便获得时间表,同一个团队可以连续玩2个游戏。但如果不可能,请尽量减少例外情况。

新算法示例:

1 个答案:

答案 0 :(得分:1)

我会尝试开始回答这个问题的方法。如果被问到,我可以将其保留为社区维基,以便人们可以进行编辑以改进此答案。

Wikipedia Round-robin Tournament Scheduling Algorithm

让我们从8支球队的情况开始。 [T 1 ,T 2 ,T 3 ,T 4 ,T 5 ,T 6 ,T 7 ,T 8 ]

让我们试着像这样看待这个问题。

T 1 T 2 T 3 T 4
T 5 T 6 T 7 T 8

所以,现在。匹配 - > [(1,5),(2,6),(3,7),(4,8)]。

顺时针旋转列表,但保持T 1 的位置固定。

T 1 T 5 T 2 T 3
T 6 T 7 T 8 T 4

所以,现在。匹配 - > [(1,5), (2,6), (3,7), (4,8),(1,6),(5,7),(2,8),(3,4)]。

在这种情况下,在复制开始之前将有7种可能的旋转。在传统的循环赛中,有(n/2)*(n-1)场比赛,其中n是球队的数量。无论参与的团队数量多少,这都应该有效。 [如果您遇到n%2 == 1,请设置X以使设置均匀并继续正常;一支球队将参加一场比赛]。

如果你需要确保每个团队必须玩8场比赛,那么当团队数量均匀时,完全 8次轮换。 < / p>

这种方法相应地确保,在给予足够数量的球队的情况下,同一支球队将不会重新开始比赛。

修改即可。

让我们从3支球队的情况开始。 [T 1 ,T 2 ,T 3 ]

让我们试着像这样看待这个问题。

T 1 T 2
T 3 X

所以,现在。匹配 - &gt; [(1,3),(2,X)]。

顺时针旋转列表,但保持T 1 的位置固定。

T 1 T 3
X T 2

所以,现在。匹配 - &gt; [(1,3), (2,X),(1,X),(3,2)]。

下一个案例,匹配 - &gt; [(1,3), (2,X), (1,X), (3,2),(1,2),(X,3)]。

下一个案例,匹配 - &gt; [(1,3), (2,X), (1,X), (3,2), (1,2), (X,3),(1,3),(2,X)]。

...

匹配 - &gt; [(1,3), (2,X), (1,X), (3,2), (1,2), (X,3)(1,3), (2,X), (1,X), (3,2), (1,2), (X,3)(1,3), (2,X), (1,X), (3,2), (1,2), (X,3)(1,3), (2,X), (1,X), (3,2), (1,2), (X,3)(1,3), (2,X), (1,X), (3,2), (1,2), (X,3)]。

1 - &gt; [3,X,23,X,23,X,23,X,2]
2 - &gt; [X,3,1X,3,1X,3,1X,3,1]
3 - &gt; [1,2,X1,2,X1,2,X1,2,X]

如果你注意到这种模式,你会发现在这些情况下,不可能确保球队不参加背靠背比赛。它需要12次轮换才能让每支球队打8场比赛。我想提出一个公式,并相应地更新这篇文章。