二部图中的双重匹配

时间:2018-07-05 07:12:40

标签: algorithm graph-theory graph-algorithm

我在研究算法测试时遇到了以下问题,但未发布答案:

  1. 最大双匹配问题-给定二部图G =(V =(LUR),E)描述了一种算法,该算法针对E中的每个顶点v返回E st中的一组边M,其中V最多为2 M中包含v的最大大小的边。

  2. 定义:“强双匹配”是对V中每个顶点v的双匹配st,M中至少有一个包含v的边。给定二分图G =(V =(LUR), E)和强双精度匹配M,描述一种算法,该算法返回最大大小的强双精度匹配M'。证明答案。

所以我已经设法解决

1)使用归约最大流量:将顶点的s和t以及从s到L的边以及从R到t的边分别以2的容量相加,并定义L和R之间的每个边的容量为无穷大容量。使用Dinic算法找到最大流量,并返回L和R之间具有正流量的所有边。

大约2)我考虑过以某种方式操纵网络,以便每个顶点都有正向流量,然后以某种方式使用算法构造最大解。有什么想法吗?运行时限制为O(V ^ 2E)(Dinics运行时)

1 个答案:

答案 0 :(得分:0)

这是使用minimum cost flow的O(n ^ 3)解决方案。

回想一下我们如何为标准的二分匹配建立网络。

  1. 对于 L 中的每个顶点 u ,将 S 中的单位容量边添加到 u ; < / li>
  2. 对于每个边 uv ,其中 u 来自 L ,而 v 来自 R < / em>,在 u v 之间添加一条边。请注意,它的容量并不重要,只要至少是一个即可。
  3. 对于 R 中的每个顶点 v ,将 u 中的单位容量边添加到 R 中。 / li>

现在,我们保持中心部分不变,并稍微改变左右部分。

  1. 对于 L 中的每个顶点 u ,将 S 中的两个单位容量边添加到 u ,其中一个成本为-1,另一个成本为0;

与边缘相同 v-> S

忽略成本,这与您自己建立的网络相同。这里的最大流量对应于最大的双重匹配。

现在,我们找到大小为 k 的最小成本流。它对应于某种双重匹配,而其中的一种对应于接触最大可能数目的顶点的匹配,因为接触一个顶点(即,推动至少单位流量通过)会降低1的成本。第二次顶点不会降低成本,因为第二条边的成本为0。

我们如何解决:对于每个 k = 1,...,2n 迭代找到最小成本流,并取对应于最小成本的值。

使用Johnson's algorithm(也称为具有电位的Dijkstra's),每次迭代可获得O(n ^ 2),总体上为O(n ^ 3)。

P.S。 Dinic算法在单位图中的运行时间更好,在二部图中达到O(E sqrt(V))。