在前面的问题中:
Generating maximum number of 3-tuples from a list of 2-tuples
我从@AChampion得到了一个答案,如果2元组的数目可以被3整除,这个答案似乎是有效的。但是,如果我们有10个2元组,解决方案就失败了。经过一段时间的摸索,我的印象是不可能找到一个完美的解决方案,例如:
(1,2)(1,3),(1,4),(2,3),(2,4),(3,4)
所以我想找到一个解决方案,使剩余元组的数量最小化。在上面的例子中,结果可能是:
(1,2,3) # derived from (1,2), (1,3), (2,3)
(1,4),(2,4),(3,4) # remainder tuples
从3个2元组生成3元组的规则是:
(a,b), (b,c), (c,a) -> (a, b, c)
也就是说,2元组是一个长度为3的循环。三元组中元素的顺序并不重要,即:
(a,b,c) == (c,a,b)
我对有个数字n的情况很感兴趣:
for x in range(1,n+1):
for y in range(1,n+1):
if x!=y:
a.append((x,y))
# a = [ (1,2),...,(1,n), (2,1),(2,3),...,(2,n),...(n,1),...,(n,n-1) ]
从a开始,最小化生成3元组时剩余的2元组数。每个2元组只能使用一次。你知道吗
我绞尽脑汁想了好几个小时,但似乎找不出一个优雅的解决办法(嗯,我也没有找到一个丑陋的解决办法)一:-)一般情况下。有什么想法吗?你知道吗
为此,您需要创建用于替换的组合数。然后循环3个包含上述任意组合的项目的数据并替换它们。 我已经分几步做了这件事。你知道吗
输出:
相关问题 更多 >
编程相关推荐