问题在于安排一个由小型锦标赛组成的联赛,每场比赛有3支球队,这样每支球队都会以相同的次数(> 0)与其他球队比赛,并且参赛次数最少。
如果n队要一次比赛,则需要(n-1)+(n-2)+ ...... + 1场比赛。每场比赛包括3场比赛。在7支球队的情况下,我们将有21场比赛。 21 mod 3 = 0所以每个队伍互相比赛一次就足够了:
(1, 2, 3)
(2, 4, 6)
(3, 4, 7)
(4, 5, 1)
(5, 7, 2)
(6, 3, 5)
(7, 1, 6)
如果我们增加1个团队以便我们有8个团队,则需要21 + 7 = 28个游戏。但是28 mod 3 = 1所以我们需要让每支球队相互比赛3次才能平衡。
创建完整的图表很容易:
from itertools import combinations
tournaments = list(combinations(range(1,n+1),3))
games = [ [(x[0],x[1]),(x[0],x[2]),(x[1],x[2])] for x in tournaments ]
对于n = 7,这将生成:
7! / (3!*(7-3)!) = 35
比赛。一般来说:
n! / (n!*(n-3)!)
然而,如上所示,对于n = 7,只有7场锦标赛就足够了。很快就会测试所有组合变得不切实际。对于n = 7,我们已经看到最多有35个锦标赛,但35个元素的功率组合包含2 ^ 35 = 34359738368个组合。
我正在寻找一种方法来将整套锦标赛减少到最低限度,或者将其自下而上构建。有什么想法或想法吗?