初识网络流

求网络流的算法有很多,这两天刚开始学,先写一下网络流究竟是个什么东西吧。

在网络流中,v可以表示所有点的集合。

e可以表示边的集合。

而g=(v,e)就可以表示整个图。

在网络流中,s表示源点,t表示汇点。

在每条边(u,v)上,有容量c(u,v),流量f(u,v)。

在下面这幅图中,有左边的数字表示当前通道的流量,右边的数字可以表示当前通道的流量。


这幅图的出处就在图中了。

网络流还有三个性质:

容量限制(Capacity constraints)

f(u,v)<=c(u,v)一条边的流量不能大于其容量。

斜对称(Skew symmetry)

f(u,v)=-f(v,u)由u到v的净流必须是由v到u的净流的相反。

流守恒(Flow conservation)

除非u=s或u=t,否则流入该节点的流量和等于流出该节点的流量和。


残量网络*

定义r(u,v)为残量网络的流量。指的就是对于某一条边还能有多少流量经过。


这是上面图的一个残量网络。残量网络(如果网络中一条边的容量为0,则认为这条边不在残量网络中。

r(s,v1)=0,所以就不画出来了。另外举个例子:r(v1,s) = c(v1,s) – f(v1,s) = 0 – (-f(s,v1)) = f(s,v1) = 4.

其中像(v1,s)这样的边称为后向弧,它表示从v1到s还可以增加4单位的流量。

但是从v1到s不是和原网络中的弧的方向相反吗?显然“从v1到s还可以增加4单位流量”这条信息毫无意义。那么,有必要建立这些后向弧吗?

显然,第1个图中的画出来的不是一个最大流。

但是,如果我们把s -> v2 -> v1 -> t这条路径经过的弧的流量都增加2,就得到了该网络的最大流。

注意到这条路径经过了一条后向弧:(v2,v1)。

如果不设立后向弧,算法就不能发现这条路径。

**从本质上说,后向弧为算法纠正自己所犯的错误提供了可能性,它允许算法取消先前的错误的行为(让2单位的流从v1流到v2)

注意,后向弧只是概念上的,在程序中后向弧与前向弧并无区别.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值