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

    网络流的基本概念

    做题大致思路

    问题 ( ightarrow) 某种方式建图的网络流 ( ightarrow) 网络流解与原问题解是否等价。

    流网络

    流网络是一个有向图 (G<V,E>),其中有两个特殊点 (s,tin V) ,分别为源点汇点(G) 中每一条边有一个 (ge 0) 的权值,称作边的容量,边 ((u,v)) 容量可记做 (c(u,v))

    源点相当于一个水源,汇点相当于一个大海,中间的边和点相当于河流水道,水从水源流出,流经河道,流向大海。容量描述的就是这些河流水道的宽度/深度/etc.。

    为了简化问题,我们假设若存在边 ((u,v)in E),则不存在 ((v,u)in E)

    其实我们也有一种办法消除这种边,只需要将 ((v,u)) 拆成 ((v,t))((t,u)) 就可以了。

    总之,在考虑问题时,不用考虑反向边

    可行流

    对于每一个流网络,我们可以考虑它的任意一个可行流(可简称流),流用 (f) 来表示,(f(u,v)) 表示的是单位时间内从 (u) 点到 (v) 点流经边 ((u,v)) 的流。

    通俗的来说,就是河道里面流了多少水。

    就是说我们要指定每一条边的流量得到一个方案 (f) ,若满足两个条件:容量限制流量守恒 ,则称这个 (f) 是一个可行流。

    容量限制:流经边的流量小于等于边的容量,即:

    [0 le f(u,v) le c(u,v) ]

    流量守恒:除了源点汇点之外其他点不能存储流量。也就是说,流入的流量之和应该等于流出的流量之和,即:

    [sum_{vin V}f(u,v)=sum_{vin V}f(v,u) ]

    我们完全不用考虑反向边。

    对于一个可行流 (f)(|f|) 代表这个可行流的流量值,表示流从源点流向汇点的速率。我们定义:

    [|f|=sum_{(s,v)in E}f(s,v)-sum_{(v,s)in E} f(v,s) ]

    就是单位时间内从源点流出的总流量减去从源点流入的总流量

    最大流

    最大流,也叫最大可行流,一个流 (f) 是最大流当且仅当 (|f|) 最大。

    残留网络

    定义一个有向图 (G<V,E,W>) 对应一个可行流 (f) 的残留网络 (G_f<V_f,E_f,W_f>) ,其 (V_f=V , E_f=E+{(u,v)|(v,u)in E}),其每条边的容量 (c^{prime}(u,v)) 与原图及对应可行流 (f) 的关系如下:

    [c^{prime}(u,v)= egin{cases} c(u,v)-f(u,v) &,&(u,v)in E\ \ f(v,u) &,&(v,u)in E end{cases} ]

    可以看出,对于原网络的任意一个可行流都可以建立一个残留网络。

    上图示:(红色为可行流,蓝色为容量)

    这个网络的残留网络应为:(红色为反向边及其权值,蓝色为原图有的边及其权值)

    残留网络的性质

    • (f) 为图 (G) 的一个可行流,(f^{prime}) 是其残留网络的一个可行流,则 (f)+(f^{prime}) 也是图 (G) 的一个可行流。

      定义这里的流量相加的规则为:(|f+f^{prime}|=sum_{(u,v)in E}f(u,v)+f^{prime}(u,v)-f^{prime}(v,u)=|f|+|f^{prime}|)

      证明暂略。

    • 推论:若对于图 (G) 的一个可行流 (f) ,其残留网络 (G_f) 中存在一个可行流 (f^{prime}) ,其 (|f^{prime}| > 0)(f) 一定不是最大流。逆命题仍然成立。

      证明暂略。

    增广路径

    在残留网络里面,从源点开始沿容量大于0的边走到汇点的简单路径称为增广路径,也叫流增广路径。

    增广路径一定是原网络的一个可行流。

    性质

    • 对于图 (G) 的一个可行流 (f),若 (f) 的残留网络 (G_f) 中没有增广路径,则 (f) 是图 (G) 的一个最大流。

    有向图 (G) 的割为点集 (V) 的一个划分方案 (<S,T>) 使得 (Scap T=varnothing,Scup T=V)

    割的容量

    一个割 (<S,T>) 的容量 (C(S,T))

    [C(S,T) = sum_{uin S}sum_{vin T} c(u,v) ]

    最小割指的一般是最小容量割。

    割的流量

    一个割 (<S,T>) 在可行流 (f) 下的流量 (F(S,T))

    [F(S,T)=sum_{uin S}sum_{vin T}f(u,v)-sum_{uin T}sum_{vin S}f(u,v) ]

    运算方式

    接下来定义点集子集(不一定没有交集)之间的流量运算方式

    对于点集 (X,Ysubsetneq V)

    [F(X,Y)=sum_{uin X}sum_{vin Y}f(u,v)-sum_{uin Y}sum_{vin X}f(u,v) ]

    推出如下运算律:

    (F(X,Y)=-F(Y,X))

    (F(X,X)=0)

    (F(Z,Xcup Y)=F(Z,X)+F(Z,Y))

    (F(Xcup Y,Z)=F(X,Z)+F(Y,Z))

    性质

    1. 对于任意割 (<S,T>) ,其流量一定小于等于容量。

      定义式相加易得。

    2. 对于割 (<S,T>),其对应的可行流的值 (|f|=F(S,T))

      由流量守恒原则易得。

    3. 对于任意一个 (f) ,有 (|f|le C(S,T)) 对任意割成立。

      推论:最大流流量小于等于最小割容量

    最大流最小割定理

    对于一个网络 (G) ,一个流 (f) 是最大流 (^①) ,等价于 (G) 的残留网络 (G_f) 中没有增广路 (^②),等价于存在一个割 (<S,T>) 使得 (|f|=C(S,T)^③)

    证明

    [egin{aligned} ①Rightarrow②:& 设f是图G的最大流\ &假设残留网络G_f存在增广路|f^{prime}|>0\ &ecause f+f^{prime}一定为可行流and |f+f^{prime}|>f\ & herefore 假设不成立\ &故原命题成立\ end{aligned}\ \ egin{aligned} ②Rightarrow③:& 定义S为在G_f中从s开始沿着容量大于0的边走左右能走到的点。\ &可以知道,由于G_f没有增广路,所以t otin S\ &令:T=V-S(V为整个图所有点的点集)\ &则<S,T>是一个合法的割。\ &任取xin S, yin T\ &ecause G_f没有增广路\ & herefore f(x,y)=c(x,y)当(x,y)in E\ &quad f(y,x)=0,当(y,x)in E\ &ecause |f|=F(S,T)=sum_{uin S}sum_{vin T}f(u,v)-sum_{uin S}sum_{vin T} f(v,u)\ & herefore |f|=sum_{uin S}sum_{vin T}c(u,v)=C(S,T) end{aligned}\ \ egin{aligned} ③Rightarrow①:& 设f为图G的可行流,f_{max} 为图G的最大流。\ & herefore |f|le |f_{max}|\ &ecause |f|=C(S,T)\ &又ecause C(S,T)ge |f_{max}|\ & herefore f=f_{max}\ \ end{aligned}\ 综上,①Leftrightarrow ②Leftrightarrow ③,Q.A.D ]

    FF方法

    基于最大流最小割定理,我们可以得到如下方法求解最大流。

    1. 输入一个网络 (G)
    2. 确定一个可行流 (f),为当前可行流
    3. 在其残留网络(G_f)中寻找增广路径 (f^{prime})
    4. 更新当前可行流为 (f+f^{prime})
    5. 转3,若找不到增广路,输出当前可行流。
  • 相关阅读:
    Ajax 导出Excel 方式
    配置文件类型
    Ionic 发布Release 版本
    $cordovaNetwork 使用
    Web Api 跨域问题
    Python学习(五)--字典
    Python学习(四)--字符串
    Python学习(三)--列表和元组
    mac下安装HTMLTestRunner
    mac下selenium+python环境搭建
  • 原文地址:https://www.cnblogs.com/IzayoiMiku/p/14361251.html
Copyright © 2011-2022 走看看