【发布时间】:2011-04-26 07:11:46
【问题描述】:
我有一个矩形网格形式的图形,即 N 个节点和 2N 条边,所有相邻节点都是连接的。 这意味着它是双色的,因此可以对其进行二分匹配。
每条(无向)边都有一个权重 -2、-1、0、1 或 2。不允许使用其他值
如何在此图上找到匹配项,以使匹配项中的权重总和最大化?伪代码会很好,不要打扰特定的语言。
理想情况下,我正在寻找一种在二次时间内运行的算法 - 最坏的情况可能是 O(n^2 log n)。
在您提出解决方案之前,我尝试使用权重 2 的边进行最大匹配,然后使用权重 1(不超过权重 2 的边)。我在这个实现中获得了 98% 的分数(问题来自信息学奥林匹克),我想知道 100% 的解决方案是什么。
【问题讨论】:
-
你不是说2N条边吗?而且您希望匹配包括所有节点,对吗?
-
是的,2N 条边(经过编辑以反映这一点)。我希望匹配包含任意数量的节点,只要匹配中边的总和最大化。
-
我认为您正在寻找图形切割 - en.wikipedia.org/wiki/Cut_(graph_theory)。最小割算法虽然运行 O(n^3),但我怀疑这里的任何人都会击败它。
-
@dark_charlie:你为什么说它会是 O(n^3)?目前,我正在考虑 Ford-Fulkerson,即 O(VE),或者在我的情况下为 O(n^2)。唯一的问题是实施起来很麻烦。
-
@Evgeny: Ford-Fulkerson 是 O(V * E^2) 其中 E^2 = 4 * V^2 在你的情况下,产生 O(V^3)。
标签: algorithm graph matching bipartite