NTU 课程笔记: 网络流

1 网络流定义


 

s称为发点(源)

t称为收点(汇)

1.1 s-t 流 

f的value也等于流入f的f(e)的总和 

s-t流又称为可行流

2 最大流问题

找到满足capacity和flow conservation 两个条件的流的最大值

2.1 s-t 割

注意:s一定属于A,t一定属于B

注:只考虑A到B的边,不考虑B到A的边

以上图为例,capacity是10+8+10=28

 2.2 最小割问题:

找到各个割(cut)中,最小的capacity

2.3 最大流问题尝试:贪心算法

我们先试一下贪心算法,看看可不可行

还是以这张图为例:

 

 

 

这时候,通过贪心算法,我们得到的“最大流“是16

 但是,我们会发现,这个图中的最大流是 19

 所以贪心法显然不行

2.4 最大流问题:贪心法拓展

2.4.1 两个场景

我们在贪心法的基础上,考虑别的场景

 

Scenario 1 是前面贪心算法考虑的路径,只有前向传播的边。这个我们也保留。 

在此基础上,我们考虑反向边。

这个场景也是满足flow conservation条件的

 综合一下,我们有:

2.4.2 残差图 

 

 

 2.4.3 增广路径 augmenting path

 

 2.4.4 Ford-Fulkerson Algorithm

 

2.4.5 Ford-Fulkerson Algorithm 举例

还是以这张图为例:

 

 到这一步还是和前面的贪心是一样的(前面的贪心到这里就结束了

 我们先构建此时的residual graph

 然后发现s->b->a->c->t是一条增广路径,且其中的bottleneck是2。

于是进行路径增广:

 

然后再更新residual graph(标蓝的这几个方向或者数值发生了改变)

 (此时的val不是16,是18)

 此时会有路径s->b->d->a->c->t 。其中 bottleneck为1

然后我们再更新残差图,发现已经没有增广路径了。 算法结束

 对照我们之前说的最大流19,发现是一样的

3 流和割之间的关系 :flow value lemma

 蓝色的表示流出A的,黄色的表示流入A的,他们的差就是val(f)  

3.1 证明

 

3.2  弱相关性 

 

 

3.3 最大流&最小割 定理

证明: (1推2,2推3,3推4)

 

因为 val(f)都是小于等于cap(A,B)的,而这里取等了。所以此时的f是最大流 

如果有增广路径的话,Ford-Fulkerson Algorithm 就可以继续进行。网络流还可以继续增加。

所以此时不是最大流 

 4 Ford-Fulkerson algorithm的时间复杂度

        这个记结论吧 O(mnC)。  但是这个和斐波那契数列那时候的情况一样,不是一个多项式级的算法。(因为输入的size是m,n,logC)

4.1 算法的改进

        我们需要合理地找一条合适的增广路径,使得:

(1)可以有效地找到这条增广路径

(2)算法迭代次数少

4.1.1 找有最多(或者近似于最多)bottleneck capacity 的增广路径

时间复杂度降至O(m^2logC)

4.1.2 最短增广路径

(1)在整个算法的过程中,最短路径的长度不减

(2)在最多m次路径增广之后,最短增广路径的长度严格增加

最短增广路径算法的时间复杂度降至O(m^2n)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值