网络流最大流算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Maximum Flow-Minimum Cut Theorem
• Definition:
– 1、s-t流:指满足如下条件的流:
• a、源点流出量>0 • b、除s、t点外,图G中的所有点流量守恒
– 注:此处的s-t流不单指图中特定的s-t路
• s-t流的值:源点s的流出量;
– 2、s-t割:即点集S指向点集T(此处T=V(G)\X)的边 集,其中s∈S且t∈T
Dinic's algorithm
• Definition:
– 阻塞流(blocking flow):
• 网络(G,u,s,t)对应的分层图中所有可扩路的并,即 为阻塞流
Dinic's algorithm
• 算法步骤:
– 1、令所有边的流量f=0; – 2、构造剩余图的分层图(level graph) – 3、在分层图中求一个阻塞的s-t流(the blocking flow)f',若f'=0,则止 – 4、用f'对f扩充,转2
• 复杂度:
• Edmonds–Karp可在O(m*m*n)内得解
– Edmonds–Karp算法中无论边容量多大,最多增流m*n/2 次(m为边数,n为点数) – 每次增流用BFS最大为O(m)
Dinic's algorithm
• Definition:
– 分层图(level graph)
• 首先,分层图是基于剩余图的 • 其次,分层图会对所有顶点标号(与s的距离) • 最后,分层图中只存在这样的剩余边(u,v): dist(v)=dist(u)+1,不符合这一规律的边全部删去
– 2、活动点(active):除s、t外,流入>流出的 点(即超出量>0的点)
Push–relabel maximum flow algorithm (推流-重标算法)
• Definition:
– 3、距离标号(distance lຫໍສະໝຸດ Baidubels, or heights):
• a、h(s)=n,h(t)=0;(s和t的标号是固定的) • b、剩余图中的所有边(u,v),有h(u)<=h(v)+1;
Gomory–Hu algorithm
• 未完待续
– to be continued
Network Flow
Presented by
Network Flow
• 基本性质:
– 对于网络(G,u,s,t)
• 1、容量限制(Capacity Constraints):F(x,y) <= C(x,y) • 2、流量守恒(Flow Conservation):ΣF(v,x) = ΣF(x,u) • 3、斜对称性(Skew Symmetry): F(x,y) = -F(y,x)
– 4、容许(admissible)边:
• 剩余图中的边(u,v),且h(u)=h(v)+1;
Push–relabel maximum flow algorithm (推流-重标算法)
• 算法步骤:
– 1、令s的出边满流,其余边f=0(也可不置零) – 2、画出剩余图,令s的高度(height) h(s)=n,其余点h(v)=0 – 3、若有活动点,执行:
Fujishige algorithm
Fujishige algorithm
• 简单粗暴的说:
– 1、每一次迭代都从s出发(s即v1),按当前 的最大量(α)往t流
– a、只能往前流(v1—v2—v3......),若到达t点,转2 – b、若途经某边剩余容量<α,则缩减α(缩小一半向下取 整),然后重新迭代(在对应剩余图的基础上除了α啥也 没变)。注:若α=0,则终止
Ford–Fulkerson algorithm
• Definition:
– 3、一条f可扩路(the augmenting path):剩余 图中的一条s-t路 – 4、给定一个流f及剩余图中的一条路(或圈)P, 沿P使f扩充r:对每一个e∈E(P)
• 若e∈E(G),则令f(e)增加r; • 设e0∈E(G),若e为e0的反向边,则令f(e0)减小r
• Ford–Fulkerson算法的劣势:
Edmonds–Karp algorithm
-最大流问题的第一个多项式时间算法 – 与Ford–Fulkerson算法相比,改进之处在于第二步中P路 径的选择,与其任选,不如选最短(边数最少)
• 算法步骤:
– 1、令所有边的流量f=0; – 2、在 中找条最短可扩路P,若无,则止; – 3、算出P路中各边剩余容量的最小值r,并沿P 使f扩充r,转2;
– 证明:
• 1、任意一个流小于等于任意一个割(S,T),即value(F) <= cap(S,T) • 2、s∈S,t∈T当且仅当(S,T)中每条边的f都饱和,而(T,S)中每 条边的f都为零时上式取等 • 3、设F为网络的最大流,K为最小割,
– 则value(F) <= cap(K) – s∈S,t∈T;其中,令S = {v∈V(G)|从源s到v有f可扩路}∪{s}; – 则t∉S(否则存在s-t可扩路,可得到更大的流),从而K' = (S,T)是网络 中的一个割,故cap(K') >= cap(K); – 又可证(S,T)中每条边的f都饱和,而(T,S)中每条边的f都为零,故 value(F) = cap(K') >= cap(K) – 综上,value(F) = cap(K)
Theorem
• 网络N(G,u,s,t)中的可行流f是N的最大流当 且仅当N中不存在f可扩路
– 必要性:若有可扩路P,沿P使f扩大即可 – 充分性:设网络中不存在可扩路
• 令S = {v∈V(G)|从源s到v有f可扩路}∪{s},则与最 大流最小割定理同样可证K' = (S,T)是网络中的一个 割,且value(f) = cap(K') • 设F为最大流,K为最小割,则value(f) <= value(F) <= cap(K) <= cap(K') • 故f即为最大流,K'即为最小割
• 设v为活动点:
– v点有容许边e,则push(e) – v点无容许边,则relabel(v)
– Push(e)
• 在v点的超出量e(v)与e的剩余容量中选出较小者r • 沿e使f扩充r
– Relabel(v)
• 在剩余图的(v,w)中找出高度最小的点w' • 令h(v)=h(w')+1
Push–relabel算法可在 O( n 2 m )时间内解决问题 (详见课本157)
– 2、从s出发的流成功到达t(假设为v6)
• 沿途经过的顶点按顺序为:s(v1)-v2-v3......t(v6) • 沿途经的边使流量f扩充α,得到新的剩余图,转1
Push–relabel maximum flow algorithm (推流-重标算法)
• Definition:
– 1、超出量(Flow Excess):流入-流出
– 注:此处的路径P不一定是可扩路
Ford–Fulkerson algorithm
• 输入:网络(G、u、s、t)及各边容量 • 输出:一条最大值的s-t流f • 算法描述:
– 1、初始时令所有边的流量f=0; – 2、求出剩余图(residual graph) ,并在 中找一条可扩路(the augmenting path)P。若 无可扩路,则终止; – 3、算出P路中各边剩余容量的最小值r,并沿P 使f扩充r,转2;
• 割的容量:各边容量之和 • 最小s-t割:在G中关于u具有最小容量的s-t割
Maximum Flow-Minimum Cut Theorem
• Definition:
Maximum Flow-Minimum Cut Theorem
• 任一个网络(G,u,s,t)中,最大流的流量等于最小 割的容量
• 复杂度:在一定基础上可达O(mn log n), 其中,n为点数、m为边数(详见课本153)
• Dinic算法的Example
• Dinic算法的Example
Fujishige algorithm
• 传说中的弱多项式算法
– 对简单有向图G以及整容量可在O(mnlog u max ) 时间内正确求解最大流问题,其中n为点数、 m为边数、u max为最大边容量(详见课本153)
• 讨论的前提:
– G为简单有向图 – 网络(G,u,s,t)中所有容量均为整数
• 最大流(max-flow)问题,就是求在满足网络流性质 的情况下,源点 s 到汇点 t 的最大流量。
Ford–Fulkerson algorithm
• Definition:
– 1、剩余图(residual graph): – 2、剩余容量(residual capacity):