我在研究算法测试时遇到了以下问题,但未发布答案:
最大双匹配问题-给定二部图G =(V =(LUR),E)描述了一种算法,该算法针对E中的每个顶点v返回E st中的一组边M,其中V最多为2 M中包含v的最大大小的边。
定义:“强双匹配”是对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运行时)
答案 0 :(得分:0)
这是使用minimum cost flow的O(n ^ 3)解决方案。
回想一下我们如何为标准的二分匹配建立网络。
现在,我们保持中心部分不变,并稍微改变左右部分。
与边缘相同 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))。