我有一些我从某些数字生成的对的列表。我的问题并不涉及如何计算我的对,因为我已经计算出来,但最大化了可能的总数。
例如:
[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。然后再去,等......
答案 0 :(得分:0)
您描述的问题是在图表中找到maximal matching(在您的示例中,如果i
与j
配对,则j
也会与{i
配对1}},所以你可以通过边连接它们。以下python package以及。{
this code包含相关的实现。