找到最大匹配

时间:2016-09-13 14:24:44

标签: algorithm graph computer-science

  

G(A,B,V),一个二分图,|A|=|B|=nM的匹配E子集|M| = n-2013。描述一种有效的算法来确定是否存在最大匹配。

基本上,给定的解决方案是从图表构建流网络,方法是添加s,t个顶点,将s连接到v中的每个顶点A和每个顶点{在vB中{1}}。所有容量均为t

现在,我们为所有边1(以及连接到M边缘的所有边,从Ms)提供一个开始流程

现在我们只需要运行Fold-Falkerson(或Edmond-Karp)算法并检查我们是否能够改进t路径(即为某些路径添加更多流量)。更确切地说,我们最多需要运行BFS,2013次来决定

我的问题是:
它为什么有效?在我看来,2013只是一个随意的匹配。我们假设M是最大匹配的一部分。

我很高兴澄清一下!

由于

1 个答案:

答案 0 :(得分:2)

IIUC,算法是:

  1. 创建流网络 s→A→B→t

  2. 在此网络上,计算 M 引起的流量。

  3. 现在创建residual flow graph,然后从这里继续Edmonds-Karp。

  4. 为什么这样做? Ford-Fulkerson method保证,给定任何有效流量(特别是在这种情况下由 M 给出的流量,而最大流量尚未达到,那里在这里,每次增加都会使流量(以及匹配)增加1.因此,如果最大流量是 q ,那么 q - | M | 迭代,它将实现。

    似乎让您感到困惑的一点是,似乎最佳匹配必然包括 M 。不是这种情况。沿着剩余网络的扩充实际上可以取消原始网络中的流。因此,增强实际上可以反转" M 的一些匹配。