zoukankan      html  css  js  c++  java
  • 网络流基本概念

    引语

      网络流是图论中一个博大精深的分支。其最主要的难点在于各种模型的建立,我们需要熟练掌握其中的算法模板并且充分理解其原理,积累建图经验,才能在遇到网络流的题目时从容应对。

      本篇blog主要介绍网络流的基本概念,弄清楚这些概念、定理及理解其证明,对于后面的学习会颇有助益。

    基本概念

    流网络

      一个流网络G=(V,E)是一张有向图,图中每条有向边(x,y)∈E都有一个给定的权值c(x,y),称为边的容量。特殊地,若(x,y)不属于E,则c(x,y)=0。图中还有两个特殊的点s,t∈V(s≠t),称为源点汇点

    可行流

      定义网络的流函数f:对于(x,y)∈E,f(x,y)称为边的流量

      对于任意一个可行流,需要满足两个条件:

        ①容量限制:0<=f(x,y)<=c(x,y);

        ②流量守恒:除源点和汇点外,对于图中任意一个点,流入该点的流量之和等于从该点流出的流量之和;形式化地来看,即对于任意x∈V(x≠s,t),∑f(y,x)=∑f(x,y),其中(x,y),(y,x)∈E。

      整个网络的流量值|f|=∑f(s,v)-∑f(v,s),其中(s,v),(v,s)∈E。

    最大流

      最大流即最大可行流,指流网络的所有可行流中流量最大者。

    残留网络

      对于原网络的任意一个可行流,存在唯一残留网络与之对应。

      我们用Gf表示残留网络,Gf=(V,E'),其中E'包含E中所有边及E中所有边的反向边。

      残留网络中边的容量记为c'(x,y)。若(x,y)∈E,即(x,y)为原网络的边,则c'(x,y)=c(x,y)-f(x,y),其中c(x,y)-f(x,y)被称为边(x,y)的剩余容量;若(x,y)不属于E,且(y,x)∈E,即(x,y)为原网络中某条边的反向边,则c'(x,y)=f(y,x)。

    引理

      记f'为残留网络的流。若f为流网络的一个可行流,f'为该可行流对应的残留网络的可行流,则f+f'也是原网络的一个可行流,且|f+f'|=|f|+|f'|。

    证明:

      要证f+f'是原网络一个可行流,只需考虑可行流需要满足的两个条件。

      ①容量限制:

        新可行流中的边有两种情况,一种是由原可行流与残留网络中的可行流同向的边累加,一种是原可行流与残留网络中的可行流反向的边相减(前者减后者)。

        (i) (x,y)∈E,f'(x,y)<=c'(x,y)=c(x,y)-f(x,y),∴f'(x,y)+f(x,y)<=c(x,y)。形象来看,残留网络中的属于原网络的边的容量为原边的剩余容量,则即使该边满流,则其剩余容量加上原流量后必然也满足容量限制。

        (ii)(y,x)∈E,0<=f'(x,y)<=c'(x,y)=f(y,x)<=c(y,x),∴0<=f(y,x)-f'(x,y)<=c(y,x)。形象来看,残留网络中的反向边可以看成是原网络中的原边退流,即原网络中的边的流量减去一个值,而这个值是大于0的,所以只要原网络的边满足容量限制,则减去一个大于0的值后必然也满足容量限制。

      ②流量守恒:

        由于f与f'分别满足流量守恒,则f+f'也满足流量守恒。

      而要证|f+f'|=|f|+|f'|,可以这样看,原网络中,从s流出的净流量加上残留网络中从s流出的净流量就等于新的可行流中从s流出的净流量。

    证毕!

      推论:若残留网络中存在f'满足|f'|>0,则f必然不是最大流(显然f+f'的流量比f大)。

      而反之,命题“若残留网络中不存在f'满足|f'|>0,则f必然是最大流”不一定成立。

    增广路径

      在残留网络中,从s出发,沿容量大于0的边走,能够走到t,则这条路径即为一条增广路径。

    定理

      对于一个可行流f,在其残留网络中不存在增广路径,则f为最大流。

      为了证明该定理,我们需要引入割的概念。

      将V划分为S,T满足S∪T=V,S∩T=∮,且s∈S,t∈T,则[S,T]被称为一个割。

    割的容量

      c(S,T)=∑∑c(u,v),其中u∈S,v∈T,即所有从S指向T的边的容量之和。

    割的流量

      f(S,T)=∑∑f(u,v)-∑∑f(v,u),其中u∈S,v∈T,即从S流向T的流量之和减去从T流向S的流量之和。

    性质1

      对于流网络的任意一个割,满足f(S,T)<=c(S,T)。

    证明:f(S,T)=∑∑f(u,v)-∑∑f(v,u)<=∑∑f(u,v)<=∑∑c(u,v)=c(S,T)。

    性质2

      对于流网络的任意一个割,满足f(S,T)=|f|。

      为了证明之,我们需要先清楚一些性质:

        对于任意的V的子集X,Y,定义f(X,Y)=∑∑f(u,v)-∑∑f(v,u),其中u∈X,v∈Y,设Z也是V的一个子集。

        ①f(X,Y)=f(Y,X)。

        ②f(X,X)=0。

        ③f(Z,X∪Y)=f(Z,X)+f(Z,Y),其中X∩Y=∮。

        ④f(X∪Y,Z)=f(X,Z)+f(Y,Z),其中X∩Y=∮。

    性质2的证明:

      ∵S∪T=V,S∩T=∮,∴f(S,V)=f(S,S)+f(S,T)。

      ∴f(S,T)=f(S,V)-f(S,S)=f(S,V)=f({s},V)+f(S-{s},V)=f({s},V)=|f|。

      下证f(S-{s},V)=0:

        设集合S'=S-{s},则S'中既不含源点也不含汇点,故其中的点均满足流量守恒,流量为0。

        f(S',V)=∑∑f(u,v)-∑∑f(v,u)=∑(∑f(u,v)-∑f(v,u))=0,其中u∈S',v∈V。

    证毕!

      注:证明参考胡伯涛《最小割模型在信息学竞赛中的应用》。

    结论

      综合性质1性质2可得,对于原网络的任意一个可行流f和任意一个割,均满足|f|<=c(S,T)。

    最大流最小割定理

      任何一个网络的最大流量等于最小割中边的容量之和,简记为“最大流=最小割”。

      即以下三个条件等价:

      ①可行流f是最大流。

      ②可行流f的残留网络中不存在增广路径。

      ③存在某个割[S,T],|f|=c(S,T)。

     证明:

      要证①<=>②<=>③,只需证①=>②=>③=>①。

      证①=>②:可行流f是最大流,则可行流f的残留网络中不存在增广路。

        反证法:若可行流f的残留网络中存在增广路,则必然可以找到一个可行流f'满足|f'|>0,则|f+f'|=|f|+|f'|>|f|。

      证③=>①:若存在割[S,T],可行流f满足|f|=c(S,T),则f是最大流。

        由结论,对于任意一个可行流和任意一个割均满足|f|<=c(S,T),故最大流<=最小割<=c(S,T),而最大流>=|f|,而|f|=c(S,T)>=最大流,所以|f|=c(S,T)。

        最大流<=最小割,而最小割<=c(S,T)=|f|<=最大流,故最大流=最小割。

      证②=>③:若可行流f的残留网络中不存在增广路,则必然存在某个割[S,T],某个可行流f,满足|f|=c(S,T)。

        构造集合S:在残留网络中,从s出发,沿容量大于0的边走,所有能走到的点的集合。

        由于不存在增广路径,故T=V-S,s∈S,t∈T,且S∪T=V,S∩T=∮。

        故[S,T]是合法的割。

        对于任意的x∈S,y∈T,f(x,y)=c(x,y)。

        反证法:若f(x,y)<c(x,y),则残留网络中c'(x,y)>0,则y必然能够被遍历到,则y∈S,矛盾!

        对于任意的a∈T,b∈S,f(a,b)=0。

        反证法:若f(a,b)>0,则残留网络中c'(b,a)=f(a,b)>0,则a必然会被遍历到,则a∈S,矛盾!

        ∴|f|=f(S,T)=∑∑f(u,v)-∑∑f(v,u)=∑∑c(u,v)=c(S,T),其中u∈S,v∈T。

    证毕!

  • 相关阅读:
    学习python报错处理
    Java命名规则
    python打开文件可以有多种模式
    python中的异常
    python中的构造函数和构造函数和析构函数的作用
    学习网址
    使用Python+selenium过程中所需安装的库和软件
    oracle 、server和my sql 语法区别
    blob(斑点)特征,SimpleBlobDetector(OpenCV案例源码detect_blob.cpp解读)
    查找与绘制轮廓findContours()、drawContours()(OpenCV案例源码contours2.cpp解读)
  • 原文地址:https://www.cnblogs.com/ninedream/p/13412298.html
Copyright © 2011-2022 走看看