【问题标题】:Find a maximum matching找到最大匹配
【发布时间】:2017-01-21 04:44:22
【问题描述】:

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

基本上,给定的解决方案是从图中构建一个流网络,通过添加s,t 顶点,将s 连接到A 中的每个顶点vB 中的每个顶点v 到@ 987654332@。所有容量都是1

现在,我们为所有边 M(以及从 st 的所有边连接到 M 的边)提供一个起始流

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

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

我很高兴得到澄清!

谢谢

【问题讨论】:

  • 您的问题是查找是否存在包含 M 的最大匹配?
  • 不,只是是否存在最大匹配(大小为$n$)

标签: algorithm graph computer-science


【解决方案1】:

IIUC,算法是这样的:

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

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

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

为什么会这样? Ford-Fulkerson method 保证,给定 any 有效流量(特别是在这种情况下,由 M 给出的流量,虽然尚未达到最大流量,但存在增加残差网络中的路径。这里,每次增加都会使流量(以及匹配)增加 1。因此,如果最大流量是 q,那么在 q - |M| 次迭代,就会实现。

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

【讨论】:

  • 哦,我现在明白了。取消包括寻找新的扩充路径。
猜你喜欢
  • 1970-01-01
  • 2017-02-23
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2020-10-08
相关资源
最近更新 更多