我有一个2元组列表,并希望从列表中生成尽可能多的3元组。例如:从2元组列表生成3元组的最大数目
#!/usr/bin/python
import itertools
a = list(itertools.combinations([1,2,3,4,5,6,7,8,9], 2))
即
a = [(1, 2), (1, 3), ..., (1, 9), (2, 3), ..., (8, 9)]
现在我想找到可以从该列表中生成的循环3元组的最大数量,一个这样的3元组将是:
(1,2),(2,3),(1,3) -> (1,2,3)
每个2元组只能使用一次。我想我可以使用暴力方法,但我有一种感觉,它可以以更聪明的方式完成。有什么想法吗?
对于任何有兴趣的人来说,这个问题是一个调度问题。 n个球队在一个赛季中应该互相打一次球。一个赛季包括一系列比赛,理想情况下比赛由3支队伍组成,其中3支队伍相互对战(总共3场比赛)。目标是避免只有两支球队的比赛。
你能涉及到[图中的周期](http://www.geeksforgeeks.org/detect-cycle-undirected-graph/)? –
我想,但是如果我们用无向图中的边来考虑这个问题,我们正在处理一个完整的图:https://en.wikipedia.org/wiki/Complete_graph。然后,我们希望在该图中找到尽可能多的3个循环。 – Lennart