2019.8.1 金华正睿集训总结Day5

8.1

上午

网络流

定义

一个流网络 G = ( V , E ) G=(V, E) G=(V,E) 为一张满足以下条件的有向图:

1.每一条边有一个非负容量,即对于任意E中的 (u,v) , 有 c ( u , v ) ≥ 0 c(u, v) \geq 0 c(u,v)0

2.如果G中存在边 (u,v) ,那么不存在 (v,u) 。我们将图中不存在的边的容量定为0。

3.图中含有两个特殊节点:源 s 与汇 t。

一个流可看做是一个从VxV到R的映射,满足下面两条性质:

1.容量限制: 对于任意的 u,v, 0 ≤ f ( u , v ) ≤ c ( u , v ) 0 \leq f(u, v) \leq c(u, v) 0f(u,v)c(u,v)

2.流量守恒:对于任何非源汇的中间节点u,我们有

∑ v ∈ V f ( v , u ) = ∑ v ∈ V f ( u , v ) \sum_{v \in V} f(v, u)=\sum_{v \in V} f(u, v) vVf(v,u)=vVf(u,v)

最大流

最大流问题,即是找出一个满足上述条件的f,使得 ∑ ν ∈ V f ( s , v ) \sum_{\nu \in V} f(s, v) νVf(s,v) 被最大化

最大流问题 -> 带反向边的最大流问题

多源汇最大流问题

一个流f的流量|f|定义为:
∣ f ∣ = ∑ v ∈ V f ( s , v ) − ∑ v ∈ V f ( v , s ) |f|=\sum_{v \in V} f(s, v)-\sum_{v \in V} f(v, s) f=vVf(s,v)vVf(v,s)
(由于在图G中不存在反向边,因而在上面的讨论中只需要最大化前半部分。 )

最大流建模

• 是否存在从s到t的可经过相同节点不经过相同边的两条路径?

• 是否存在从s到t的不可经过除s、 t外相同节点的两条路径?

• 是否存在从s到t的不可经过除s、 t外相同节点和相同边的两条路径?

点容量的解决办法:拆点,将容量限制转化到边上。

最大流算法-从几个基本想法开始

残量网络

• 对于网络G,其残量网络G_f与G的差别在于每条边的边容量修改为G中边容量减去当前流的该边流量。

具体来说, c f ( u , v ) = c ( u , v ) − f ( u , v ) c_{f}(u, v)=c(u, v)-f(u, v) cf(u,v)=c(u,v)f(u,v)

• 另外,残量网络中还包含原图中所有边的反向边,容量等同于正向边在f中当前流量,用于“反悔” 时将流送回起点:

c f ( ν , u ) = f ( u , ν ) c_{f}(\nu, u)=f(u, \nu) cf(ν,u)=f(u,ν)

增广

• 令f’为残量网络G_f上的一个流
( f ↑ f ′ ) ( u , v ) = { f ( u , v ) + f ′ ( u , v ) − f ′ ( v , u )  if  ( u , v ) ∈ E 0  otherwise  \left(f \uparrow f^{\prime}\right)(u, v)=\left\{\begin{array}{ll}{f(u, v)+f^{\prime}(u, v)-f^{\prime}(v, u)} & {\text { if }(u, v) \in E} \\ {0} & {\text { otherwise }}\end{array}\right. (ff)(u,v)={f(u,v)+f(u,v)f(v,u)0 if (u,v)E otherwise 

引理1 : 增广后的网络的流量等于两个流流量直接相加。

∣ f ↑ f ′ ∣ = ∣ f ∣ + ∣ f ′ ∣ \left|f \uparrow f^{\prime}\right|=|f|+\left|f^{\prime}\right| ff=f+f

证明:

a.根据两条限制证明是个流

b.流量相同

• 增广路

• 残量网络当中从s到t的一条简单路径

• 增广路p的流量定义为
c f ( p ) = min ⁡ { c f ( u , v ) : ( u , v )  is on  p } c_{f}(p)=\min \left\{c_{f}(u, v) :(u, v) \text { is on } p\right\} cf(p)=min{cf(u,v):(u,v) is on p}
• 那么显然,若是将p上的每条边的流量均赋为c_ f( p ),所形成的依然是满足条件的原图的一个流。

在这里插入图片描述

• 结论1:增广后流量增加。 令f_p为当前流f的残量网络中找到的一增广路,则
∣ f ↑ f p ∣ = ∣ f ∣ + ∣ f p ∣ > ∣ f ∣ \left|f \uparrow f_{p}\right|=|f|+\left|f_{p}\right|>|f| ffp=f+fp>f
• Q:如何能证明当我们找不到增广路时原图达到最大流?

• 在匹配算法中,可以通过对称差分两个匹配来证明

• 割

• 为一个对于点集V的划分,将V划分为两个集合S与T,其中源点s在S中,汇点t在T中。对于一个流f而言,割(S, T)间的网络流定义为
f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ S ∑ v ∈ T f ( v , u ) f(S, T)=\sum_{u \in S} \sum_{v \in T} f(u, v)-\sum_{u \in S} \sum_{v \in T} f(v, u) f(S,T)=uSvTf(u,v)uSvTf(v,u)
• 割(S, T)的容量定义为:
c ( S , T ) = ∑ u ∈ S ∑ v ∈ T c ( u , v ) c(S, T)=\sum_{u \in S} \sum_{v \in T} c(u, v) c(S,T)=uSvTc(u,v)
• 对于一个网络而言,最小割为所有的割当中容量最小的那个。

引理2:对于任意流f,任意割之间的网络流量不变。
f ( S , T ) = ∣ f ∣ f(S, T)=|f| f(S,T)=f
• 证明:可由流量守恒导出。
在这里插入图片描述

• 结论2:任意流f的流量不超过任意割的容量。

∣ f ∣ ≤ c ( S , T ) |f| \leq c(S, T) fc(S,T)

• 证明:由引理2显然。
∣ f ∣ = f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ S ∑ v ∈ T f ( v , u ) ≤ ∑ u ∈ S ∑ v ∈ T f ( u , v ) ≤ ∑ u ∈ S ∑ v ∈ T c ( u , v ) = c ( S , T ) \begin{aligned}|f| &=f(S, T) \\ &=\sum_{u \in S} \sum_{v \in T} f(u, v)-\sum_{u \in S} \sum_{v \in T} f(v, u) \\ & \leq \sum_{u \in S} \sum_{v \in T} f(u, v) \\ & \leq \sum_{u \in S} \sum_{v \in T} c(u, v) \\ &=c(S, T) \end{aligned} f=f(S,T)=uSvTf(u,v)uSvTf(v,u)uSvTf(u,v)uSvTc(u,v)=c(S,T)

• 定理1.最大流最小割定理: 对于一个网络G,下面三个命题总是等价

• 流 f 是 G 的最大流。

• 当前流 f 的残量网络 G_f 上不存在增广路。

• 存在某个割使得 |f| = c(S, T) 成立。由结论2可知,满足条件的割必定是最小割。

• 证明: (1) -> (2) 反证法,可由结论1直接导出矛盾。

(2) -> (3) 构造点集S为s在残量网络上能够到达的点集, T=V-S,那么t一定在T中,进而(S,T)是一个割。

考虑S、 T间的任意点对(u,v),如果(u,v)在原网络中存在,那么必定有f(u,v)=c(u,v),

否则该边会在残量网络中出现从而将u,v放入同一个连通块。

如果(v,u)在原网络中存在,那么必定有f(v,u)=0.
f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ v ∈ T ∑ u ∈ S f ( v , u ) = ∑ u ∈ S ∑ v ∈ T c ( u , v ) − ∑ v ∈ T ∑ u ∈ S 0 = c ( S , T ) \begin{aligned} f(S, T) &=\sum_{u \in S} \sum_{v \in T} f(u, v)-\sum_{v \in T} \sum_{u \in S} f(v, u) \\ &=\sum_{u \in S} \sum_{v \in T} c(u, v)-\sum_{v \in T} \sum_{u \in S} 0 \\ &=c(S, T) \end{aligned} f(S,T)=uSvTf(u,v)vTuSf(v,u)=uSvTc(u,v)vTuS0=c(S,T)
由引理2得, |f|=c(S,T)。

• 证明: (3) -> (1),由结论2知, |f|<= c(S,T),故当等号取到时,等式右边必然是最小割,等式左边必然是最大流。

最大流算法-Ford-Fulkerson算法

在这里插入图片描述

• 正确性显然。 While内部的复杂度为 O(|E|),而寻增广路次数最高可达 O(|f * |),其中 f * 为 G 的最大流。总复杂度 O(|E||f *|)。

最大流算法-Edmonds-Karp算法

• 在Ford-Fulkerson算法的基础上,将寻增广路的过程优化为每次寻“最短”增广路的过程,其中路径长度定义为从s到t需要经过的边条数。

• 引理3 : 在EK算法中,令d(u)表示残量单位网络上从s到u的最短路距离。那么对于V-{s,t}中的任意u,在每次增广后d(u)不降。

• 证明: 考虑两次相邻的增广前后的流,从中选取满足d(u)降的且距离最近的u进行分析,并导出矛盾。

在这里插入图片描述

• 定理2: 在EK算法中,增广的次数是O(VE)的。

• 证明: 考虑在残量网络的一条增广路中充当“瓶颈”的边,在该次增广后必定会从残量网络中消失。考虑证明每条边最多消失O(V)次。加上一次增广必定会有至少一条这样的边,故最多增广O(VE)次。

• 故EK算法的总复杂度为O(VE^2)

下午

最大流算法-Dinic算法

• 在Edmonds-Karp算法的基础上,将每次寻找一条增广路优化为每次计算出一个增广网络

• 在残量网络中,若两个端点间的最短路恰好差1,就称之为可行边

• 由所有可行边构成的图(最短路图),称为可行网络

• 在可行网络上的无法再扩充流量的流,称为阻塞流,注意不必是残量网络的最大流。

• 增广完一个阻塞流后, d(t)必增,因而最多增广O(V)次

• 增广单次的实现和时间复杂度:(注意加上所有的优化)

• 一个节点的dfs至多被调用O(E)次

• For循环外部的时间复杂度之和为O(VE)

• For循环执行次数可分为:只经过一次的和经过多次的

• 经过一次的复杂度之和为O(E)

• 经过多次的次数之和为O(VE)。

• 因此加了左边所有优化的dinic总复杂度为O(V^2E)
在这里插入图片描述

• 上面在某个可行网络上找阻塞流的算法过程

• 是按某种顺序找增广路,一旦找到就直接增广了

• 如果我们能够支持:

• 快速加边

• 找到增广路后查询瓶颈大小(路径最小值)

• 增广(路径加)

• 在残量网络中删边

• ……

• 仿佛一个动态树就可以了

阅读材料:

https://www.arl.wustl.edu/~jst/cse/542/text/sec19.pdf

http://courses.csail.mit.edu/6.854/16/Notes/n10-blocking_flows.html

• 可以使用动态树优化找阻塞流并增广的过程,迭代次数不变,因而可以达到**O(VElogV)**的复杂度。

• 单位容量网络:

• 所有的存在的边容量均为1的网络

• 引理4 : dinic在单位容量网络中至多增广O(min(E{1/2},V{2/3}))次

• 证明: d(t):起点到终点的最短路

• a. 增广次数不超过 O(E^{1/2})

• 分别考虑 d(t)<=E{1/2} 和 d(t)>=E{1/2} 时的情况

• 前者由于阻塞流增广后的性质,每次自然会增,因此只需要迭代不超过E{1/2}就可到达后一种情形。

• 后者考虑层之间的割。由于存在超过E{1/2},因而必有两层间边数不超过E{1/2},由此可推出残量网络最大流不超过E{1/2}。由于每次增广必会增加流量,故只需增广不超过**E{1/2}**次。

• b. 增广次数不超过 O(V{2/3})

• 同理(考虑连续的两层之间的节点个数均不超V^{1/3}前后的情况)。

• 结论3 : dinic在单位容量网络中寻找阻塞流可达O(E)复杂度。

• 证明:依然可以分两部分

• Dfs调用 — 每个点所在增广路数量之和

• For循环 — 每条边所在增广路数量之和

• 因此,在单位容量网络当中, dinic的时间复杂度可达O(E min(E{1/2},V{2/3}))

• 单位网络

• 对于V-{s,t}中的任意一节点,都满足下面两条之一:

• a. 仅存在一条入度为1的边

• b. 仅存在一条出度为1的边

• 结论4 : dinic在单位网络中效率可达O(V{1/2}E)

• 证明: 与之前类似。

• 应用:在使用dinic跑二分图匹配时的复杂度可分析到O(mn1/2)

最小割的简单例子:最大权闭合子图

• 定义

• 给出一张有向图,其中每个点都有一个点权。

• 任务是选择一个权值和最大的子图,使得每个点的后继都在子图当中。

• 建图

• 令S集表示取, T集表示不取,原图中(u,v)连+oo的边。

• s连正权点,容量为权;负权点连t,容量为权的相反数。

• 正权点权值和-最大流即为答案。

• 证明

• a. 合法性:最终的S集导出一闭合子图

• b. 最优性:导出的为最大权闭合子图

• c(S,T) = min(不选的正权点边权和 - 选了的负权点边权和)

• ANS = 所有正权点边权和 – min(不选的正权点边权和 - 选了的负权点边权和)

= max(选了的正权点的边权和 + 选了的负权点边权和)

例题

总结:

网络流吧,讲的内容需要有些基础

显然我是没有的

所以听的不是很懂

表示这是个大坑

慢慢补吧

然后,这个博客里基本是课件内容

部分纸质证明来自mjy老师 (懒得打了)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值