在对子列表中查找最大对数

时间:2017-07-26 22:54:27

标签: algorithm python-2.7 graph-theory

我有一些我从某些数字生成的对的列表。我的问题并不涉及如何计算我的对,因为我已经计算出来,但最大化了可能的总数。
例如:

[1,3,7,19,13,21] 

结果

{1:[19,13,21],  
 3:[7,19],  
 7:[3,19,13],  
 19:[1,3,7,21],  
 13:[1,7,21],  
 21:[1,19,13]}  

1可以与19,13或21配对.3可以与7或19配对,依此类推。我的目标是最大化独特的配对,这样我就可以在没有配对的情况下留下最少的分数。在这种情况下,你可以有1-13,3-7和19-21,剩下0。但你也可以做1-19,7-13,留下3和21没有伴侣。

之前是否存在处理此问题的算法?我想把它们放到图表中并试图找到最大的汉密尔顿路径,但这似乎几乎是不可能的。我在python中这样做,所以我有字典和列表,我一直用作容器。

编辑:数字是否可以配对的条件是它们是否与对形成某种模式。给定两个数字x和y,它们遵循这种模式,直到x == y或它永远存在。如果x < Y,  y = y - x和x = 2 * x。然后再去,等......

1 个答案:

答案 0 :(得分:0)

您描述的问题是在图表中找到maximal matching(在您的示例中,如果ij配对,则j也会与{i配对1}},所以你可以通过边连接它们。以下python package以及。{ this code包含相关的实现。