【问题标题】:Find the maximum amount of pairs in a list of pairs在对列表中找到最大数量的对
【发布时间】:2017-07-26 22:54:26
【问题描述】:

我有一个从某些数字生成的配对列表。我的问题与我已经弄清楚的如何计算我的配对无关,而是最大化可能的配对总数。
例如:

[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

【问题讨论】:

  • 原谅我这是一个愚蠢的问题,但是允许两个数字配对的条件是什么。例如,在您的上一个示例中,为什么不能 3 和 21 一对?
  • 我添加了一个解释配对的编辑。

标签: algorithm python-2.7 graph-theory


【解决方案1】:

您描述的问题是在图中找到maximal matching(在您的示例中,如果ij 配对,那么j 也与i 配对,因此您可以通过以下方式连接它们边缘)。以下python package 以及 this code 包含相关实现。

【讨论】:

  • 是的!这就是我一直在寻找的东西,但似乎我想要的是最大匹配,但现有包只能找到最大匹配。
  • @Mathochist 是的,确实在他们写的注释中“算法贪婪地选择图 G 的最大匹配 M(即不存在 M 的超集)”。这似乎声称它确实找到了最大基数匹配:code.activestate.com/recipes/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多