定向最大加权二分匹配允许共享起始/结束顶点

时间:2013-02-12 13:06:23

标签: algorithm graph complexity-theory matching

设G(U u V,E)是加权有向二分图(即U和V是二分图的两组节点,E包含从U到V或从V到U的有向加权边)。这是一个例子:

bipartite directed and weighted graph

在这种情况下:

U = {A,B,C} 
V = {D,E,F} 
E = {(A->E,7), (B->D,1), (C->E,3), (F->A,9)} 

定义: DirectionalMatching (我编写这个术语只是为了让事情变得更清晰):可以共享起点或终点顶点的有向边集。也就是说,如果U-> V和U' - > V'都属于 DirectionalMatching ,那么V / = U'和V'/ = U但是它可能是U = U'或V = V'。

我的问题:如何有效地找到上面定义的 DirectionalMatching ,以获得最大化其边缘权重之和的二分方向加权图?

有效,我的意思是多项式复杂性或更快,我已经知道如何实现一种天真的暴力方法。

在上面的示例中,最大加权 DirectionalMatching 是:{F-> A,C-> E,B-> D},值为13.

正式证明这个问题与图论中任何其他众所周知的问题的等价性也是有价值的。

谢谢!

注1:此问题基于Maximum weighted bipartite matching _with_ directed edges,但需要额外放宽,以便匹配中的边缘共享原点或目的地。由于这种放松产生了很大的不同,我创造了一个独立的问题。

注2:这是最大重量匹配。基数(存在多少条边)和匹配所覆盖的顶点数与正确的结果无关。只有最大的重量很重要。

注2:在我研究解决问题的过程中,我发现了这篇论文,我认为对其他试图找到解决方案的人有帮助:Alternating cycles and paths in edge-coloured multigraphs: a survey

注3:如果有帮助,您还可以将图形视为等效的2边彩色无向二分多图。然后问题公式将变为:找到没有颜色交替路径的边集或具有最大权重和的周期。

注4:我怀疑这个问题可能是NP难的,但我不是那种减少经验的人,所以我还没有成功证明这一点。

又一个例子

想象一下你有

4个顶点:{u1, u2} {v1, v2}

4条边:{u1->v1, u1->v2, u2->v1, v2->u2}

然后,无论权重如何,u1->v2v2->u2都不能在同一 DirectionalMatching 中,v2->u2u2->v1也不能。但u1->v1u1->v2可以,u1->v1u2->v1也可以。

2 个答案:

答案 0 :(得分:10)

G'定义新的无向图G,如下所示。

  1. G'(A, B)
  2. 中为权重w的每个定向边(A, B)都有一个权重为w的节点G 如果(A,B)和(B,C)都是G中的有向边,则
  3. G'具有无向边((A, B),(B, C))
  4. http://en.wikipedia.org/wiki/Line_graph#Line_digraphs

    现在在G'中找到一个最大(加权)的独立顶点集。

    http://en.wikipedia.org/wiki/Vertex_independent_set

    编辑:此点之后的东西只有在所有边权重相同时才有效 - 当边权重具有不同的值时,这是一个更难的问题(谷歌“可能的算法的最大权重独立顶点集”)

    通常这将是NP难问题。但是,G'是一个二分图 - 它只包含偶数周期。在二分图中查找最大(加权)独立顶点集是 NP-hard。

    您将在G'上运行的算法如下。

    1. 找到G'的关联组件,说H_1, H_2, ..., H_k
    2. 对于每个H_i做2个着色(比如红色和蓝色)的节点。这里的食谱方法是对H_i交替颜色进行深度优先搜索。一种简单的方法是根据H_i中相应的边缘是从G变为U(红色)还是从VV中的每个顶点着色到U(蓝色)。
    3. H_i中选择节点的两个选项是所有红色节点或所有蓝色节点。选择具有较高权重的彩色节点集。例如,红色节点集的权重等于H_i.nodes.where(node => node.color == red).sum(node => node.w)。调用较高权重的节点集N_i
    4. 您的最大加权独立顶点集现在为union(N_1, N_2, ..., N_k)
    5. 由于G'中的每个顶点都对应G中的一个有向边,因此您拥有最大的DirectionalMatching。

答案 1 :(得分:-2)

使用Hungarian Algorithm可以在多项式时间内解决此问题。 Vor上面的“证明”是错误的。

为上述示例构建问题的方法如下:

   D E F
A  # 7 9  
B  1 # #
C  # 3 #

其中“#”表示负无穷大。然后使用匈牙利算法解析矩阵以确定最大匹配。如果要查找最小匹配,可以将数字乘以-1。