我正在研究算法的分析。我目前正在阅读Network Flow
算法。我正在考虑应用Network Flow
算法来查找bipartite matchings
最低费用。
G
使用相应的网络流G'
M
成为perfect matching
G
G<sub>M</sub>
成为与此匹配相关联的residual graph
来自Jon Kleinberg和Eva Tardos的Algorithm Design 7.13页码406,
Theorem 7.62
州:
(7.62)让M成为完美匹配。如果G M 中存在负成本定向周期C,则M不是最小成本
然而,这个定理是有道理的,我对bipartite flow network's
的{{1}} residual graph
如何实际包含一个循环感到困惑。我能看到周期的唯一方法是涉及perfect matching
或sink
。
但是在source
perfect matching
中,source
不包含任何边缘,而sink
将不包含任何边缘。此外,在内部节点中发生的循环似乎与Bipartite graph
的定义相矛盾。
有人可以在残差图中提供这样一个循环的例子吗?
答案 0 :(得分:1)
不确定。考虑a = cost和c = capacity:
的图表 a=3,c=1
Ao----->oB
\ ^
\ /a=1,c=1
\/
/\
/ \a=1,c=1
/ v
Co----->oD
a=3,c=1
因此显然有2种可能的最大流量。一个使用水平边缘,另一个使用对角线。
对于沿着水平线的流动,我们有一个残差图:
a=-3,c=1
Ao<-----oB
\ ^
\ /a=1,c=1
\/
/\
/ \a=1,c=1
/ v
Co<-----oD
a=-3,c=1
注意循环B-> A-> D-> C,容量为1,成本为-3 + 1 -3 + 1 = -4。
这个循环的直观解释是,一个单元的流量沿着循环中的边缘每次增加 - 或相反地沿着相反方向沿着其边缘流动的每个减少 - 我们将总流量成本减少4因为我们将沿着较便宜的对角线边缘取代流动沿着相对昂贵的水平边缘流动。
在最小成本流量的增强路径算法中,我们继续沿着这个循环推动1个单位的流量,最终沿着对角线获得新的,更便宜的流量。这将提供新的残差图:
a=3,c=1
Ao----->oB
^ /
\ /a=-1,c=1
\/
/\
/ \a=-1,c=1
v \
Co----->oD
a=3,c=1
现在循环是A-> B-> C-> D并且成本为3 - 1 + 3 - 1 = 4,因此沿对角线的最大流量是最小成本最大流量。