流网络复习笔记

流网络

流网络(Flow Network)

一个有向图,源点不断产生某物质,流向消耗该物质的汇点的过程。源点以固定速度产生,汇点以同样的速度消耗。

  • 流网络G=(V, E)是一个有向图,其中n=|V|, m=|E|

  • 容量Capacity:每条边(u, v) ∈E 有一个非负容量c(u, v) ≥ 0. 如果 (u, v) ∉ E, 则假定c(u, v) = 0

  • 流网络中两个特别的点:

    • 发点或者源s (无入边)
    • 收点或者汇t (无出边)
  • 每个结点都位于从源点到汇点的某条路径上,也就是对每个结点v ∈ V, 存在一条路s->v->t 因此图为连通图,|E| ≥ |V | - 1.

流网络-形式化定义

G中的流f是一个实数函数 f : V × V → R ,满足:

容量限制(Capacity Capacity constraint): 对于所有的u, v ∈ V, f (u, v) ≤ c(u, v)

反对称性(Skew symmetry): 对于所有的u, v ∈ V, f (u, v) = - f (v, u)

流守恒性(Flow conservation): 对于所有的u ∈ V - {s, t}, 则f (u, v)成为从顶点u到v的可行流,可以为正,为零,也可以为负。流f的值的定义为|f|=∑_v∈v f(S,v)

若描述卡车运输的问题。

在这里插入图片描述

Vancouver是源点s(源,发点)

Winnipeg是汇点t(汇,收点)

产品经过中间城市运输,但是每天只能有c(u, v) 箱从城市u运到v

每条边上的权值为容量(capacity).

增广路径、增广链(Augmenting paths)

流网络上的路径:一条从源点s到汇点t到路

前向弧 (Forward arc) : 弧的方向与路的方向一致

反向弧 (Backward arc): 弧的方向与路的方向相反

eg.在这里插入图片描述

其中路径为:s, v2, v1, v3, t

前向弧:(s, v2) (v1, v3) (v3, t)

反向弧:(v2, v1)

增广路径相关概念

容量网络G = (𝑉, 𝐸, 𝑐, 𝑠, 𝑡 ), 𝑓是G上任一可行流

饱和边:流量等于容量的边

非饱和边:流量小于容量的边

零流边:流量等于0的边

非零流边:流量大于0的边

增广路径p 是一条从s 到 t 的边不重复对路,(不考虑边的方向情况下的路径)

如果 (u, v) 是前向弧(与路的方向一致) : 0≤f(u,v)<c(u,v)(流量小于容量,还有提升的空间,即非饱和边)

如果 (u, v) 是反向弧: 0 <f(u,v) ≤ c(u,v)(反向流量大于0,即非零流边)

最大流问题

在不违背容量限制的条件下,把物质从源点传输到汇点的最大速率是多少。

Ford-Fulkerson最大流算法

  1. 从给定的初始可行流 f(u, v) = 0 开始,对所有 u, v ∈ V,初始流为0. 0
  2. 找一条关于当前可行流的s-t增广链(augmenting path)。
  3. 对当前增广链扩展当前的可行流,得到新的可行流。
  4. 重复步骤2,3,直到没有增广链为止

标号法求增广路径详细步骤

为顶点标号:对于结点 𝑗标号为( 𝑙j , 𝛿𝑗 )。𝑙j 是前驱结点的标号.𝛿𝑗 是这条边剩余的流量。

(1) 对源点𝑠 标号为 (0, +∞ )

(2) 如果结点i 被标记了,则检查其邻接点 j (by DFS or BFS), <i, j> or <j, i>∈E, 如果结点 j 没有被标号

•如果 <i, j> ∈E , f( i, j ) < c( i, j ) (非饱和边), 那么𝑗 被标为( 𝑙𝑗 , 𝛿𝑗) = (𝑖, θj)=( i, min{𝛿i, 𝑐( 𝑖,𝑗 )− 𝑓( 𝑖,𝑗)} )

• 如果<𝑗, 𝑖> ∈E, fji >0(非零流边), 那么结点 j 被标记为 (𝑙𝑗 , 𝛿𝑗) = (−𝑖, θj )=( -i, min{𝛿i, 𝑓( 𝑗, 𝑖 )} )

(3) 重复 (2), 直到t被标号。

(4)从t反向寻找路径,检查这条增广路上所有的标号,设置 θ = min┬jθ_j

(5) 调整前向弧的流 f(i,j ) = f(i,j)+ θ 后向弧的流f(i,j )= f(i,j)- θ

(6) 删除所有的标号,继续(2)到(5),直到无增广路

eg.

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

FF最大流算法的改进途径

FF算法没有规定如何求s-t增广路径

改进的策略

​ 保证所求增广路径具有一定性质(如最短)

​ 并且能一次能求多个增广链

辅助网络,残留网络

残留网络

给定流网络G=(V, E),源点为s,汇点为t,设f是G的一个可行流,一对顶点u和v,在不超过其容量的条件下,从u到v之间可以压入的额外流量就是残留容量(residual capacity)。

公式为:cf(u, v) = c(u, v) - f(u, v)

如果 c(u, v) = 16 ,f(u, v) = 11, 残留容量 cf (u, v) = 5.

如果 c(u, v) = 16 , f(u, v) = -4, 则残留容量 cf (u, v) = 20.

从v到u有4个单位的网络流,可以通过u到v压入4个单位的流抵消它。

FORD-FULKERSON算法流程

因为存在阻塞流,阻塞流一旦选定不能后悔,FORD-FULKERSON算法通过反向边避免阻塞流

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Edmonds-Karp算法

Edmonds-Karp算法使用最短路径(把残留图看成无权图,或者权值都为1)

Edmonds-Karp算法是Ford-Fulkerson算法的特例

算法时间复杂度:O(|E|2.|V|)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Dinic算法

关键概念:阻塞流,blocking flow

当前流是阻塞流,如果不能找到其他从源点到汇点到流

最大流是阻塞流;阻塞流不一定是最大流

阻塞流可以用最简单到方法找到

关键概念:层次图,level graph

  1. 初始化,残留图就是原图

  2. 循环:

    a. 构建残留图的层次图

    b.找到层次图的阻塞流(如果找不到阻塞流则停止循环)

    c. 更新残留图

算法复杂度

时间复杂度:O(m·n*2)

m是边数,n是点数最多循环n-1次每次循环O(mn)

最多循环n-1次

每次循环O(mn)

eg.

Dinic算法-初始化

在这里插入图片描述

Dinic算法-构建层次图

在这里插入图片描述

Dinic算法-找到阻塞流,更新残留图

在这里插入图片描述

Dinic算法-构造新的层次图

在这里插入图片描述

Dinic算法-找到阻塞流,更新残留图

在这里插入图片描述

Dinic算法-构造新的层次图

在这里插入图片描述

结果

在这里插入图片描述

流网络的割 (cuts)

流网络G = (V, E)的割 cut (S, T),将V划分为 S 和 T = V - S 两部分,使得 sϵS , tϵT.

(S, T) = {<i, j>| <i, j> ϵE and i ϵS, j ϵT } 是图G的割

如果 f 是一个可行流,则穿过割(S, T)的网络流被定义为 f(S, T).

在这里插入图片描述

割集(S, T)的容量,割量(The capacity of the cut)表示为c(S, T). c(S,T)=∑_<i,j>∈(S,T)▒c(i,j)

最小割集 (minimum cut ):容量最小的割集称为最小割

通过割的净流可能包括顶点间的负网络流,但割的容量完全由非负值组成

在这里插入图片描述

图中的割 ({s, v1, v2}, {v3, v4, t}) .

割的网络流量f(v1, v3) + f(v2, v3) + f(v2, v4) = 12 + (-4) + 11= 19,

容量是: c(v1, v3) + c(v2, v4) = 12 + 14= 26.

设流网络 G 源点为 s 汇点为t。 f 是 G 上的任一可行流, (S, T) 是G的割,则经过(S, T)的网络流 f(S, T) = |f|.

设流网络 G 源点为 s 汇点为t。 f 是 G 上的任一可行流, (S, T) 是G的割, f 值的上限是 G的任意割的容量.

流与割的关系

令 f 是网络上的flow, (S,T) 是任何s-t cut:

(1) 由 S 到达 T 的流,等于到达节点sink t 的流

(2) f 小于cut的capacity

(3) 如果 f 等于cut (S,T) capacity,则 f 是最大流, (S,T) 是最小割

最大流最小割(Max-flow min-cut)定理

在任何网络中,最大流 fmax 的值=最小割的capacity

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法回答关于"计算机网络复习笔记 王道"的问题。我的回答只基于提供的引用内容。如果您有其他关于计算机网络的问题,我会很乐意帮助您回答。 #### 引用[.reference_title] - *1* [计算机网络笔记(王道考研) 第一章:计算机网络体系结构](https://blog.csdn.net/zimuzi2019/article/details/126634216)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [计算机网络笔记(王道考研) 第四章:网络层](https://blog.csdn.net/zimuzi2019/article/details/126634461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [计算机网络笔记(王道考研) 第五章:传输层](https://blog.csdn.net/zimuzi2019/article/details/126634511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值