【问题标题】:Directed maximum weighted bipartite matching allowing sharing of start/end vertices允许共享开始/结束顶点的定向最大加权二分匹配
【发布时间】:2013-01-27 19:15:41
【问题描述】:

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

在这种情况下:

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 也可以。

【问题讨论】:

  • 只有我一个人,还是这个定义允许我们把左边的每一个节点都连接到右边的每一个节点上,仍然是“定向匹配”?
  • 确实是定向匹配
  • 那有什么问题呢?所以让我们从左到右和从右到左取所有边 8)我们不能再取了(没有),所以它会使总和最大化。
  • @K.Bulatov 不,这不是解决方案,请仔细阅读定向匹配的定义。例如 A->E 不能出现在与 F->A 相同的匹配中
  • 不会是最大值在 {F->A,C->E,B->D} 的 13 处吗?

标签: algorithm graph complexity-theory matching


【解决方案1】:

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

上面例子的问题结构化方法如下:

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

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

【讨论】:

  • 您将如何使匈牙利算法适应这种情况,包括:1) 有向边,以及 2) 解决方案中边共享顶点的可能性?
  • 边缘是有向的这一事实无关紧要。如果一个顶点连接到多个顶点,那么这会导致多个可能的权重。例如,在我上面的示例中,A 有两个权重,但 B 和 C 只有一个。你也可以在每个顶点之间有边,这将导致一个没有“#”值的完整矩阵。
  • 完全正确。这不是二分匹配。提问者明确表示他们正在寻找他们称之为“定向匹配”(不是标准术语)的东西,在问题的上面定义。图本身被定义为二分,但据我所知,所请求的解决方案不是二分匹配。
  • 好的,在这种情况下,我猜你的意思是 {E->A,F->A} 被认为是一个值为 16 的“定向匹配”,但是,这仍然是不可能的,因为如果你做这个匹配,那么你如何将 B/C 匹配到 D,你不能。如果不是 1 对 1 匹配,那么目标是什么就不是很清楚了。我的意思是,如果您允许任何所谓的“匹配”,为什么不匹配所有内容(这正是您上面的“解决方案”所做的,包括所有 4 个边)?
  • 是的,在我所说的修改后的情况下,我认为解决方案是选择所有边。阻止这始终成为解决方案的是这样一种想法,即如果 A->B 和 B->C,您不能同时选择 A->B 和 B->C 作为解决方案,因为一个人的头边与另一条边的尾部相交。 “匹配”在这里可能是一个不恰当的术语。我认为提问者正在请求一组有向边,以便没有头与任何尾重叠。
【解决方案2】:

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

  1. G' 有一个节点 (A, B),每个有向边的权重为 w (A, B),在 G 中的权重为 w
  2. G' 有无向边 ((A, B),(B, C)) 如果 (A, B) 和 (B, C) 都是 G 中的有向边

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 对节点进行两种着色(比如红色和蓝色)。这里的食谱方法是对H_i 交替颜色进行深度优先搜索。一种简单的方法是根据G 中的相应边是从UV(红色)还是从VU(蓝色),为H_i 中的每个顶点着色。李>
  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)

由于G' 中的每个顶点都对应于G 中的一条有向边,因此您有最大的DirectionalMatching。

【讨论】:

  • 哇,就像用line graph 建模问题一样简单。 Skiena 是对的,再次:Design Graphs not Algorithms!!!我还没有检查整个解决方案(这里真的很晚了)但我明天会第一件事(看起来你得到了赏金虽然:))。
  • 是的,您在那本书中引用的部分几乎准确地总结了我在这个答案中所做的事情:(1)转换图形,(2)应用已知算法(稍作修改)。让我知道你的效果如何。
  • 对于第 2 步,由于 G' 是二分的,所以着色不是很简单吗?只需对从 U 到 V 的边创建的节点使用蓝色(红色),对从 V 到 U 创建的节点使用红色(蓝色)。我不明白为什么需要深度优先搜索。
  • 我有一个例子,我不明白这将如何解决:U={A,C,E}V={B,D}E={(A->B,10), (B->C,1), (C->D,1), (D->E,10)}。我希望最大值为 20,但如果是 2 色,它会以 11 结束?
  • @viblo 在我的示例中,将图形转换为 G' 后,N 为:{(s->(A,E),7), (s->(B,D),1 ), (s->(C,E),3), ((A,E)->(F,A),infinite), ((F,A)->t,9)} 最大流量为7 ,最大加权独立集的总权重为 (7+1+3+9)-7 = 13 。集合的顶点部分是仍然可以访问的(那些流量
猜你喜欢
  • 2013-01-27
  • 2023-03-09
  • 1970-01-01
  • 2011-04-26
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
相关资源
最近更新 更多