首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

最大流(1)——各种思路

2012-09-07 
最大流(一)——各种思路思考顺序:先有容量限制c[] -- 有多种可能的网络流f[] -- 找最大流(流值|f|最大的流

最大流(一)——各种思路

思考顺序:

先有容量限制c[] --> 有多种可能的网络流f[] --> 找最大流(流值|f|最大的流)

?

一、网络流

?

G=<V,E>为有向图

?

1. 容量为非负: 如果有向边(u,v) 存在,c(u,v)≥0; 如果有向边(u,v)不存在,c(u,v)=0

?

2. 网络流:

(1)容量限制:f(u,v)≤c(u,v)???????????????????????????????? ==> 单向流速受限

(2)反对称性:f(u,v)=-f(v,u)??????????????????????????????? ==> 在管道中向不同方向看,水流一面迎面而来,一面向前推我

(3)流守恒性:f(V-s-t,V)=0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ==> A. 中间顶点不存储流(流进=流出)

?????????????????????????????????????????????????????????????????????????????????? B. 进入中间顶点的正网络流=离开该点的正网络流

注意:

?????? 流守恒性也可以写作f(V,V-s-t)=0,即流入一个顶点的总流为0;

?????? 在f(V-s-t,V)或f(V,V-s-t)的中,其中每一元素可以为正可以为负,不要以为不能为负(这是“残留网络”中的限制,网络流不受限)

?

引理26.1: G=<V,E>是流网络,f是G的一个流。

?????????????? 定义f(X,Y)=∑f(x,y),x∈X, y∈Y.

????????????? (1)任意X?V,???????????????????????? 则 f(X,X)=0??????????????????????? ==>反对称性:? f(u,v)= - f(v,u)

????????????? (2)任意X,Y?V, ? ?????????????????? 则f(X,Y)=-f(Y,X)????????????????? ==>(1)的推广
最大流(1)——各种思路

?

????????????? (3)X,Y,Z? V, X∩Y=????????????? 则f(X∪Y,Z)=f(X,Z)+f(Y,Z)
最大流(1)——各种思路

?

二、流值 和 最大流

?

1. 流f的值|f|=f(s,V)=f(V,t): 源s送出多少水/汇t喝了多少水

2. 最大流问题: 给出流网络G(源点s,汇点t),希望从中找出流值|f*|最大的流f*, f*称为最大流

?

三、最大流问题求解

?

1. 三个理论基础 和 “最大流最小割定理”:

?

??? 理论一:“残留网络 residual network”

网络流图G ==决定唯一==> 有向边的残留容量 cf(u,v)=c(u,v)-f(u,v)

网络流图G ==决定唯一==> G导出的残留网络 Gf=<V,Ef>, Ef={(u,v)∈V×V: cf(u,v)>0}

??? (1)后者(残留网络)由满足条件的前者(残留容量严格>0的有向边)组成

??? (2)残留网络中的所有有向边上的残留容量均>0. 如果认为残留容量cf(u,v)是残留网络的(有向)边的权值,则所有权值严格>0,∵不满足介个条件的有向边根本就通不过海选!

?

??? 理论二:“增广路径 augmenting path”

增广路径p: 残留网络Gf中从源点s到汇点t的一条简单路径。

增广路径p的残留容量: cf(p)=min{cf(u,v):? (u,v)在增广路径p上}

?

??? 理论三:“割 cut”

网络流G的割(S,T),源点s∈S, 汇点t∈T。从S到T的边称为割边。

?

最大流最小割定理:

??? (1)f是G的一个最大流???????????????????????????????????? ==>达到流值|f|=f(s,V)最大

??? (2)残留网络Gf不包含增广路径???????????????????????? ==>不能再压入正网络流

??? (3)对G的某个割(S,T) ,存在|f|=c(S,T)???????? ?? ==>对最大流的限制来自最小容量的那个割

?

2. 求解最大流问题

?

??? 2.1 枚举算法

????????? 时间复杂度: O(2^|V|·|E|)

????????? 思路:枚举所有割(S,T),找到容量c(S,T)最小的那个割的容量,即为最大流的流值

????????? 评价:算法复杂度高,因此仅当顶点个数|V|较少时适用(否则整数越界);另外,它还不能给出得到最大流的具体的网络流,只是返回了最大流值。

?

?

?

参考资料:
另一个小盆友学习的心得:? http://hi.baidu.com/sheep_finalfreedom/blog/item/273772dc2cf5775994ee3795.html#0

外国大牛的文章:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=maxFlowRevisited#1

?

?

弄到这里有点心力憔悴了,以后再继续看:

1. Dinic算法

2. 预流推进算法

热点排行