最大限度地减少元组数量

时间:2017-08-10 10:09:01

标签: python algorithm minimization

问题在于安排一个由小型锦标赛组成的联赛,每场比赛有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个组合。

我正在寻找一种方法来将整套锦标赛减少到最低限度,或者将其自下而上构建。有什么想法或想法吗?

0 个答案:

没有答案