二部图中最小顶点覆盖算法

标签 algorithm graph-theory matching bipartite vertex-cover

我正在尝试找出一种算法来寻找二分图的最小顶点覆盖。

我在考虑一个解决方案,将问题简化为二部图中的最大匹配。众所周知,可以使用 bip 创建的网络中的最大流量找到它。图。

最大匹配M应该确定最小值。顶点覆盖 C,但我无法处理选择顶点来设置 C。 比方说bip。图有 X、Y 部分,最大匹配边的端点在集合 A 中,不属于 B 的顶点。

我会说我应该选择一个顶点作为 M 到 C 中的一条边。 特别是 M 中边 e 的端点连接到集合 B 中的顶点,否则如果它仅连接到 A 中的顶点则无关紧要。 不幸的是,这个想法通常行不通,因为可以找到我的算法的反例,因为 A 中的顶点也可以通过 M 中包含的边之外的其他边连接。

如有任何帮助,我们将不胜感激。

最佳答案

Kőnig's theorem证明正是这样做的——从二部图中的最大匹配构建最小顶点覆盖。

假设您有一个 G = (V, E) 二分图,在 XY 之间分隔。

正如您所说,首先您必须找到一个最大匹配(例如可以使用 Dinic's algorithm 来实现)。我们将此最大匹配称为 M

然后构造你的最小顶点覆盖:

  • 找到 U X1 中不匹配顶点的集合(可能为空),即。未连接到 M
  • 中的任何边
  • 构建 Z 集合或顶点在 U 中,或通过交替路径连接到 U(在 的边之间交替的路径>M 和边不在 M)
  • 那么 K = (X\Z) U (Y ∩ Z) 就是你的最小顶点覆盖

维基百科文章详细介绍了如何证明 K 确实是最小顶点覆盖。


1 或者Y,都是对称的

关于二部图中最小顶点覆盖算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42836016/

相关文章:

c++ - 用于查找多数元素的分而治之算法?

java - 8 皇后算法 : Not getting full result set

java - 当没有匹配时陷入循环 - Java

搜索表示与特定关键字相关的图形的算法

ruby - 搜索多个数据源

algorithm - 一棵树中最小顶点覆盖数

algorithm - 从平面 (2D) 中的一组点,丢弃孤立的和剩余的组

algorithm - 树中的中心节点(距离最小和)

java - Lab颜色空间中的颜色梯度算法

mysql - 尝试显示与 ID 匹配次数不超过 3 次的匹配行。单表