【网络流】:一些基本知识
2016-01-09 13:31
477 查看
1)求最小割的割集:
在最大流中,源点 s 和残留网络中所有 s 可达的节点构成最小割。
2)最大流和最小割唯一性的关系
3)怎么判断一个流图中的最小割是否唯一
先求最大流,得到残留网络,从源点出发得到能够到达的结点,然后从汇点出发逆着边的方向往回走得到能够到达的结点(即能够到达汇点的结点),如果结点全部能够被访问到,最小割就是唯一的。否则如果中间有结点,两边都访问不到,最小割就不是唯一的。以图
2 为例,残留网络中所有边的方向正好反过来, 源点能够到达的结点只有 s,能够到达汇点的只有 t, 存在结点使两边都访问不到, 所以最小割不是唯一的。
结点分为三类:( 1) upstream 上游结点: 在所有最小割中都属于 A 集合(源点所在的集合)(
2) middle 中间结点: 除了上游节点和下游节点之外的其它节点( 3) downstream 下游结点: 在所有最小割中都属于 B 集合(汇点所在集合)计算一个流图的最大流,然后得到残留网络,源点能够到达的结点就是上游结点,能够到达汇点的就是下游结点,其它为中间结点。 最小割是唯一的当且仅当中间节点为空。
4)最大流算法回顾
Ford-Fulkerson: 凡是用增广路径求最大流的都可以说是Ford-Fulkerson
算法
Edmonds-Karp: 每次直接用BFS
找增广路径
Dinic: 先用BFS
找层次图, 然后在层次图上用
DFS 找增广路径那么能不能只用
DFS
来找增广路径?正确性可以保证, 但是容易出现低效率的情况, 举例流图如下( 有可能需要增广2*106次):
Blocking Flow算法:正向边全都被堵死了,
Dinic
算法本质上是一个 Blocking Flow
算法。
Dinic
算法:第一次用 BFS
找层次图, 然后 DFS
只准沿着层次往下走, 当 Dinic算法这一阶段走完的时候, 说明这个层次图是不连通的,这个时候的流对于开始阶段时候的流图来说就是Blocking Flow。
Blocking Flow
和最大流的关系:如果一个流是最大流, 那么它一定是
Blocking Flow, 但是倒过来就不行。反例如下图所示(这个流图中最大流实际上应该是2,
但是你可以有一个Blocking Flow
直接从最上面
3 条有向边走, 但它不是最大流):
5)几个匹配定理:
Hall’s theorem: 如果分成
X
与 Y
两边的二部图 G=(V,E)有一个完美匹配,那么对所有
A
⊆ X 的必须有Γ ≥
(A)
A 。
Γ(A)
表示
A 在
Y 中对应的点的集合。
Menger’s theorem:
Edge disjoint path
版本:在每个具有节点 s
与 t
的有向图(或无向图)中,边不交 s-t
路径的最大数目等于为分离
s 与
t 所需移走的最少边数。
Node disjoint path
版本:Given a directed (or undirected) graph with two nonadjacent nodes s and t, the max number of internally node-disjoint s-t paths equals the min number of internal nodes
whose removal disconnects t from s.
在最大流中,源点 s 和残留网络中所有 s 可达的节点构成最小割。
2)最大流和最小割唯一性的关系
3)怎么判断一个流图中的最小割是否唯一
先求最大流,得到残留网络,从源点出发得到能够到达的结点,然后从汇点出发逆着边的方向往回走得到能够到达的结点(即能够到达汇点的结点),如果结点全部能够被访问到,最小割就是唯一的。否则如果中间有结点,两边都访问不到,最小割就不是唯一的。以图
2 为例,残留网络中所有边的方向正好反过来, 源点能够到达的结点只有 s,能够到达汇点的只有 t, 存在结点使两边都访问不到, 所以最小割不是唯一的。
结点分为三类:( 1) upstream 上游结点: 在所有最小割中都属于 A 集合(源点所在的集合)(
2) middle 中间结点: 除了上游节点和下游节点之外的其它节点( 3) downstream 下游结点: 在所有最小割中都属于 B 集合(汇点所在集合)计算一个流图的最大流,然后得到残留网络,源点能够到达的结点就是上游结点,能够到达汇点的就是下游结点,其它为中间结点。 最小割是唯一的当且仅当中间节点为空。
4)最大流算法回顾
Ford-Fulkerson: 凡是用增广路径求最大流的都可以说是Ford-Fulkerson
算法
Edmonds-Karp: 每次直接用BFS
找增广路径
Dinic: 先用BFS
找层次图, 然后在层次图上用
DFS 找增广路径那么能不能只用
DFS
来找增广路径?正确性可以保证, 但是容易出现低效率的情况, 举例流图如下( 有可能需要增广2*106次):
Blocking Flow算法:正向边全都被堵死了,
Dinic
算法本质上是一个 Blocking Flow
算法。
Dinic
算法:第一次用 BFS
找层次图, 然后 DFS
只准沿着层次往下走, 当 Dinic算法这一阶段走完的时候, 说明这个层次图是不连通的,这个时候的流对于开始阶段时候的流图来说就是Blocking Flow。
Blocking Flow
和最大流的关系:如果一个流是最大流, 那么它一定是
Blocking Flow, 但是倒过来就不行。反例如下图所示(这个流图中最大流实际上应该是2,
但是你可以有一个Blocking Flow
直接从最上面
3 条有向边走, 但它不是最大流):
5)几个匹配定理:
Hall’s theorem: 如果分成
X
与 Y
两边的二部图 G=(V,E)有一个完美匹配,那么对所有
A
⊆ X 的必须有Γ ≥
(A)
A 。
Γ(A)
表示
A 在
Y 中对应的点的集合。
Menger’s theorem:
Edge disjoint path
版本:在每个具有节点 s
与 t
的有向图(或无向图)中,边不交 s-t
路径的最大数目等于为分离
s 与
t 所需移走的最少边数。
Node disjoint path
版本:Given a directed (or undirected) graph with two nonadjacent nodes s and t, the max number of internally node-disjoint s-t paths equals the min number of internal nodes
whose removal disconnects t from s.
相关文章推荐
- VB6基于Windows API的Modbus RTU/ASCII/TCP的主站实现代码
- HTTP协议之响应头Date与Age
- IO的阻塞与非阻塞、同步与异步以及Java网络IO交互方式
- ubuntu上构建简单的基于http的文件共享服务
- 【重磅】移动网络性能揭秘(下)--网络协议及性能提升实践
- HttpWebRequest模拟浏览器的GET、POST请求
- 【转】HTTP Live Streaming直播(iOS直播)技术分析与实现
- 正则基础之 \b 单词边界(http://www.jb51.net/article/19330.htm)
- tomcat http get 参数中文乱码,tomcat源码解析
- 如何在cisco/h3c/华为的网络设备中一次性打印全部配置信息(show run和display current-configuration)
- tcpdump的简单应用
- http请求诡异问题
- Android网络请求心路历程
- Android Volley框架的使用之图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)
- 深度学习卷积网络的资源
- http协议(转)
- HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.BadSqlGram
- HTTP Live Streaming直播(iOS直播)技术分析与实现
- 全站HTTPS来了
- 每秒千万网络包的线速 SYN/DNS flooding