未定向非加权图中的最大顶点对数

时间:2018-01-15 22:43:31

标签: algorithm graph-theory

给定具有任何类型连接的无向加权图,即它可以包含1到几个有或没有单个节点的组件,每个节点可以有0到多个连接,允许循环(但是没有从节点到自身的循环)

我需要找到最大量的顶点对,假设每个顶点只能使用一次,例如。如果图表有节点1,2,3而节点3连接到节点1和2,则答案是1(1-3或2-3)。

我正在考虑以下方法:

  1. 删除所有单个节点。
  2. 找到边缘连接的节点边缘数量最少的节点边缘数量最多(如果有多个 - 取其中任何一个),从图中计算并删除这对节点。
  3. 在图表连接节点时重复步骤2.
  4. 我的问题是:

    1. 它是否为任何情况提供最大数量的对?我是 担心一些极端,比如与某些人有关的周期 单个或多个路径等
    2. 有没有更快更正确的算法?

      我可以使用java或python,但伪代码或算法描述完全没问题。

1 个答案:

答案 0 :(得分:0)

即使在无周期图的情况下,也不能保证您的方法提供最大数量的顶点对。例如,在下图中,您的方法是选择边(B,C)。在那个不幸的选择之后,没有更多的顶点对可供选择,因此你最终会得到一个大小为1的解决方案。显然,最优解包含两个顶点对,因此你的方法不是最优的。

graph

你要解决的问题是最大匹配问题(不要与Maximal Matching Problem混淆,这是很容易解决的):

  

找到边S的最大子集,以便S中没有顶点出现在多个边上。

The Blossom AlgorithmO(EV^2)中解决了这个问题。

算法的工作方式并不简单,它引入了非平凡的概念(如契约匹配,森林扩展和开花)以建立最佳匹配。如果您只是想在不完全理解其复杂性的情况下使用该算法,您可以在线找到它的即用型实现(例如this Python implementation)。