Algorithm 如何将最大基数二部匹配减少到最小路径覆盖?
我读过这两个问题: 还有这个Algorithm 如何将最大基数二部匹配减少到最小路径覆盖?,algorithm,network-flow,Algorithm,Network Flow,我读过这两个问题: 还有这个 但我不明白如何解决最大匹配问题可以用来解决最小路径覆盖。我知道解决方案是N-M,其中n是G中的顶点数,m是最大匹配,但我找不到原因< p>这里是对这个事实的直观解释(这不是严格的证明):让我们来看看路径覆盖中的每个路径。除路径中的第一个顶点外,每个顶点都有一个唯一的前置顶点。此外,每个顶点只有一个后续顶点(每个路径中的最后一个除外)。这就是为什么我们可以说每个顶点都与其前一个顶点相匹配。如果顶点与任何对象都不匹配,则它是某条路径中的第一个顶点。这就是为什么路径的数
但我不明白如何解决最大匹配问题可以用来解决最小路径覆盖。我知道解决方案是N-M,其中n是G中的顶点数,m是最大匹配,但我找不到原因< p>这里是对这个事实的直观解释(这不是严格的证明):让我们来看看路径覆盖中的每个路径。除路径中的第一个顶点外,每个顶点都有一个唯一的前置顶点。此外,每个顶点只有一个后续顶点(每个路径中的最后一个除外)。这就是为什么我们可以说每个顶点都与其前一个顶点相匹配。如果顶点与任何对象都不匹配,则它是某条路径中的第一个顶点。这就是为什么路径的数量等于不匹配顶点的数量(每个路径正好有一个第一个顶点)。不匹配顶点的数量显然等于顶点总数减去匹配顶点的数量。这就是我们得到的
n-m
公式。不可能获得比最大匹配大小更小的路径(否则n-m1
=>m1>m
=>m
不是最大值)。同时,我们可以显式地构造具有n-m
路径的解 - 左侧有n个节点,右侧有m个节点
- 匹配后,计算maxFlow f-最大匹配数
- 左侧的f节点和右侧的f节点已在最小边覆盖中
- 在左边有n-f个不匹配的节点,在右边有m-f个这样的节点
- 这些节点还不在最小覆盖范围内,因为最大匹配不包括它们
- 每个节点都可以连接到min edge cover。所以它添加了(n-f)+(m-f)边
- 所以总的最小覆盖率是f+(n-f)+(m-f)=n+m-f