问题是如何安排一个由小型比赛组成的联盟,每个比赛中有3支球队,这样每个球队与其他球队的比赛次数相同(>;0),比赛次数最少。你知道吗
如果n个队要进行一次比赛,则需要(n-1)+(n-2)+…+1场比赛。每场比赛由3场比赛组成。在7支球队的情况下,我们将有21场比赛。21 mod 3=0,所以每队比赛1次就足够了:
(1, 2, 3)
(2, 4, 6)
(3, 4, 7)
(4, 5, 1)
(5, 7, 2)
(6, 3, 5)
(7, 1, 6)
如果我们再增加一支队伍,这样我们就有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个组合。你知道吗
我正在寻找一种方法,要么减少到一个最低限度的完整的比赛集,或建设它自下而上。有什么想法吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐