为啥图论中的最大流算法对于最大二分匹配是正确的

Posted

技术标签:

【中文标题】为啥图论中的最大流算法对于最大二分匹配是正确的【英文标题】:Why is max flow algorithm in graph theory correct for maximal bipartite matching为什么图论中的最大流算法对于最大二分匹配是正确的 【发布时间】:2021-09-08 02:20:41 【问题描述】:

我读过很多文章,说明可以使用最大流算法找到二分图的最大匹配。但是有可能我们从最大流中得到的匹配不是最大的,或者匹配没有最大边。

Anti Laaksonen 的 Competitive Programming Handbook 示例:

但是如果我以不同的方式呈现图表,那么现在的图表是:

然后随着最大流量算法的进行,匹配将是 1----5, 2----7

因为 1 只是擦除了通往水槽的路径,但如果它会走到边缘 1----6 那么匹配可能是

1----6, 3----5, 4----7

【问题讨论】:

【参考方案1】:

到目前为止,我一直和你在一起:

然后随着最大流量算法的进行,匹配将是 1----5, 2----7

您在此处描述的实际上并不是图中的最大流量。我们可以通过发送一个从 1 到 6 的流量单位、一个从 2 到 7 的流量单位以及从 3 到 5 的一个流量单位来推动更多流量。

阅读您的问题,我认为您最终得到(非最大)流量而不是最大流量的原因是因为以下陈述:

因为 1 只是删除了到 sink 的路径

根据您在此处的描述,我假设您正在使用 Ford-Fulkerson 算法之类的算法来计算最大流量:找到从源到汇的增广路径,然后将流量推过它。但是 Ford-Fulkerson 在这里还有第二步:在推动流越过一条边之后,我们在推动的流的相反方向上引入一个 residual 边。如果我们找到更好的路径,这让我们有机会“撤销”我们所做的决定。

因此,在我们从 1 到 5 推动一个流量单位后,我们将一个剩余边从 5 添加回 1,并具有单个容量单位。这意味着图表现在看起来像这样:

这里,蓝绿色的边缘从 s 流向 t,紫色的边缘从 t 流向 s。

请注意,我们可以“撤销”我们将 1 分配到 5 的决定,如下所示。在路径上推一个单位流

s → 3 → 5 → 1 → 6 → t

给这个流网络:

现在,在路径上再推一个单位流

s → 2 → 7 → t

给出整体匹配 1 -- 6, 2 -- 7, 3 -- 5,这是最大匹配。

【讨论】:

我的疑问现在很清楚了。顺便说一句,这是我们在图中添加反向边以实现最大流量的唯一原因,还是还有其他隐藏的意图?我过去只是为了算法而添加反向的,但现在我理解了它们的目的。 Ford-Fulkerson 算法会添加这些反向边缘,以确保它找到最大流量。残差图也用于最大流/最小割定理的数学证明。但是如果你把max-flow当成一个黑盒子(一个图进去,max flow出来,你不关心算法的内部操作是什么)那么你就不用担心了残余边缘。 没有。请详细说明您对算法的见解。我正在攻读计算机科学学士学位。这对我会有帮助。 剩余边对几乎任何 s-t 定向最大流算法都至关重要,它们编码所谓的“部分最优”解决方案。如果不使用它们,您将无法证明最大流算法收敛到正确答案。

以上是关于为啥图论中的最大流算法对于最大二分匹配是正确的的主要内容,如果未能解决你的问题,请参考以下文章

二分图的最大匹配(匈牙利算法)HDU1083

二分图的最大匹配—匈牙利算法

二分图的最大匹配—匈牙利算法

二分图最大匹配

图论之二分图匹配

二分图学习