为什么我们使用最大流量法来解决最大二分匹配?

时间:2013-12-09 22:29:34

标签: algorithm conceptual

例如

有A [0]和A [1]以及B [0]和B [1]

LINK(A [0],B [0])

LINK(A [0],B [1])

LINK(A [1],B [0])

最大匹配为(A [0] .B [1])和(A [1],B [0])

但是对于最大流量发现方法,我们在A后面建立一个源并在B

之后下沉

并且每次尝试路径时都会找到路径

:它首先与B [0]

得到A [0]对

然后使用路径B [0]接收,没有路径为A [1]对B [0]

它肯定无法解决这个问题,但我发现教科书,维基,博客和网站只是说它的结果与最大二分匹配相同

PS

令C(x,y)为x-> y的值,

通过应用alg,

第一次迭代:设置C(s,A [0])= 0;设置C(A [0],s)= 1(逆转流程)

以及A [0]与B [0],B [0]与t

第二次迭代:找到从s到t的路由,只有C(B [1],t)= 1

所以,第二次迭代找不到连接B [1]

的点

1 个答案:

答案 0 :(得分:3)

实际上max-flow将能够正确地链接事物。将进行第二次迭代,其中来自A [1]的流可以转到B [0],同时反转从A [0]到B [0]的链路中的流量。

你可以查看它可以做到的Ford-Fulkerson算法。

编辑:

假设您从源节点S(LINK(S,A0)和LINK(S,A1))(和结束节点F)开始,如果您在第一次迭代时应用算法,您将最终得到A0-> ; B0就像你说的那样。我将详细介绍第二次迭代。

1)“S”; T = {S}; E = {}

  • 标签(A1)= {S +,1},T = {S A1}
  • E = {S}

2)“A1”; T = {S A1}; E = {S}

  • 标签(B0)= {A1 +,1},T = {S A1 B0}
  • E = {S A1}

3)“B0”; T = {S A1 B0}; E = {S A1}

  • 标签(A0)= {B0-,1}; T = {S A1 B0 A0}
  • E = {S A1 B0}

4)“A0”; T = {S A1 B0 A0}; E = {S A1 B0}

  • 标签(B1)= {A0 +,1}; T = {S A1 B0 A0 B1}
  • E = {S A1 B0 A0}
  • 请勿检查“S”,因为它已经在T!

5)“B1”; T = {S A1 B0 A0 B1}

  • 标签(F)= {B1 +,1}; T = {S A1 B0 A0 B1 F}
  • E = {S A1 B0 A0 B1}

结束了,现在流量最大化了。