• 最大流学习笔记(1)


    1 流网络。流网络G=(V,E)是一个有向图,每条边$(u,v)in E$有一个非负容量值$c(u,v)geq 0$.如果$(u,v) otin E,c(u,v)=0$.另外有一个源节点s和汇点t。

    2 流。G中的流是一个实值函数$f:V imes V ightarrow R$,满足:

    (1)容量限制:对所有的$u,vin V$,$0 leq f(u,v)leq c(u,v)$

    (2)流量守恒:对所有的$uin V-{s,t}$,满足$sum_{vin V}f(v,u)=sum_{vin V}f(u,v)$

    一个流$f$的值$|f|$的定义为:$|f|=sum_{vin V}f(s,v)-sum_{vin V}f(v,s)$。一般来说,一个流网络不会有任何进入源点的边,因此一般$sum_{vin V}f(v,s)=0$。

    最大流要解决的问题是给定流网络G以及s、t,希望找到值最大的一个流$f$。

    3 残存网络。给定流网络G以及它的一个流$|f|$,残存网络$G_{f}$的顶点集边集以及源点汇点都与原流网络相同,$G_{f}$的边集的容量定义为:

    $c_{f}(u,v)=left{egin{matrix}c(u,v)-f(u,v) &(u,v)in E\ f(v,u) & (v,u)in E\  0 & other end{matrix} ight.$

    4 若求得残存网络$G_{f}$的一个流$f^{'}$,那么$f+f^{'}$为$f^{'}$对$f$的递增,

     $(f+f^{'})(u,v)=left{egin{matrix}f(u,v)+f^{'}(u,v)-f^{'}(v,u) & (u,v)in E\  0& other end{matrix} ight.$

     $f+f^{'}$也是G的一个流, $|f+f^{'}|=|f|+|f^{'}|$

    5 增广路径。对于流网络G和流$|f|$,增广路径$p$是残存网络$G_{f}$的一条从s到t的简单路径。增广路径$p$上能够增加的流量的最大值为$p$的残存容量$c_{f}(p)=min{c_{f}(u,v):(u,v)in p}$.定义函数$f_{p}:V imes V ightarrow R$:

    $f_{p}(u,v)=left{egin{matrix}c_{f}(p) & (u,v)in p \ 0 & otherwise end{matrix} ight.$

    $f_{p}$是$G_{f}$的一个流,$|f_{p}|=c_{f}(p)>0$,$|f+f_{p}|=|f|+|f_{p}|>|f|$

    6 流网络的切割。流网络G的一个切割$(S,T)$将顶点集合$V$划分为$S$和$T=V-S$,满足$sin S,tin T$。若$f$是一个流,那么切割$(S,T)$的净流量$f(S,T)$定义为:

    $f(S,T)=sum_{uin S}sum_{vin T}f(u,v)-sum_{uin S}sum_{vin T}f(v,u)$

    切割$(S,T)$的容量定义为:$c(S,T)=sum_{uin S}sum_{vin T}c(u,v)$

    7 设$f$为流网络G的一个流,源点s,汇点t,设 $(S,T)$为G的任意切割,则横跨切割$(S,T)$的净流量$f(S,T)=|f|$

    8 流网络G的任意流$f$的值不能超过G任意切割的容量。(容量的定义在6中)

    $|f|=f(S,T)=sum_{uin S}sum_{vin T}f(u,v)-sum_{uin S}sum_{vin T}f(v,u)$

    $leq sum_{uin S}sum_{vin T}f(u,v)$

    $leq sum_{uin S}sum_{vin T}c(u,v)$ 

    $=c(S,T)$

    9 最大流最小切割定理。设$f$为流网络G的一个流,下面的条件等价:

    (1)$f$是G的一个最大流

    (2)残存网络$G_{f}$不包括任何增广路径

    (3)|f|=c(S,T),其中$(S,T)$是某个切割。

    以下为证明

    4的证明:

    (1) $0leq (f+f^{'})(u,v) leq c(u,v)$

    有一个前提是$f^{'}(v,u)leq c_{f}(u,v)=f(u,v)$

    $(f+f^{'})(u,v)$

    $=f(u,v)+f^{'}(u,v)-f^{'}(v,u)$

    $geq f(u,v)+f^{'}(u,v)-f(v,u)$

    $=f^{'}(u,v)geq 0$

    $(f+f^{'})(u,v)$

    $=f(u,v)+f^{'}(u,v)-f^{'}(v,u)$

    $leq f(u,v)+f^{'}(u,v)$

    $leq f(u,v)+c_{f}(u,v)$

    $= f(u,v)+c(u,v)-f(u,v)$

    $=c(u,v)$

     (2)对所有的$uin V-{s,t}$,满足$sum_{vin V}(f+f^{'})(u,v)=sum_{vin V}(f+f^{'})(v,u)$

     $sum_{vin V}(f+f^{'})(u,v)$

     $=sum_{vin V}(f(u,v)+f^{'}(u,v)-f^{'}(v,u))$

     $=sum_{vin V}(f(u,v))+sum_{vin V}f^{'}(u,v)-sum_{vin V}f^{'}(v,u)$

     $=sum_{vin V}(f(v,u)+f^{'}(v,u)-f^{'}(v,u))$

     $=sum_{vin V}(f+f^{'})(v,u)$

    (3)$|f+f^{'}|=|f|+|f^{'}|$。我们假设G没有反平行边,即若$(u,v)in E$那么$(v,u) otin E$(如果G存在反平行边,假设是$(u,v)$,我们可以增加一个节点$w$ 和两条边$(u,w),(w,v)$来消除反平行边)。现在定义$V_{1}={v:(s,v)in E}$,$V_{v}={v:(v,s)in E}$,那么有$V_{1}cap V_{2}=phi $

    $|f+f^{'}|=sum_{vin V}(f+f^{'})(s,v)-sum_{vin V}(f+f^{'})(v,s)$

    $=sum_{vin V_{1}}(f+f^{'})(s,v)-sum_{vin V_{2}}(f+f^{'})(v,s)$

    $=sum_{vin V_{1}}(f(s,v)+f^{'}(s,v)-f^{'}(v,s))-sum_{vin V_{2}}(f(v,s)+f^{'}(v,s)-f^{'}(s,v))$

    $=sum_{vin V_{1}}f(s,v)-sum_{vin V_{2}}f(v,s)+sum_{vin V_{1}cup V_{2}}f^{'}(s,v)-sum_{vin V_{1}cup V_{2}}f^{'}(v,s)$

    $=sum_{vin V}f(s,v)-sum_{vin V}f(v,s)+sum_{vin V}f^{'}(s,v)-sum_{vin V}f^{'}(v,s)$

    $=|f|+|f^{'}|$

    7的证明

    首先由流量守恒,对任意$uin V-{s,t}$,$sum_{vin V}f(u,v)-sum_{vin V}f(v,u)=0$

    $|f|=sum_{vin V}f(s,v)-sum_{vin V}f(v,s)$

    $=sum_{vin V}f(s,v)-sum_{vin V}f(v,s)+sum_{uin S-{s}}(sum_{vin V}f(u,v)-sum_{vin V}f(v,u))$

    $=sum_{vin V}f(s,v)-sum_{vin V}f(v,s)+sum_{uin S-{s}}sum_{vin V}f(u,v)-sum_{uin S-{s}}sum_{vin V}f(v,u)$

    $=sum_{vin V}(f(s,v)+sum_{uin S-{s}}f(u,v))-sum_{vin V}(f(v,s)+sum_{uin S-{s}}f(v,u))$

    $=sum_{vin V}sum_{uin S}f(u,v)-sum_{vin V}sum_{uin S}f(v,u)$

     将V分解为$S$和$T=V-S$

    $|f|=sum_{vin S}sum_{uin S}f(u,v)+sum_{vin T}sum_{uin S}f(u,v)$

    $-sum_{vin S}sum_{uin S}f(v,u)-sum_{vin T}sum_{uin S}f(v,u)$

    $=sum_{vin T}sum_{uin S}f(u,v)-sum_{vin T}sum_{uin S}f(v,u)$

    $=f(S,T)$

    9的证明

    $(1)Rightarrow (2)$假设$f$是G的一个最大流,但是$G_{f}$中还有一条增广路径$p$,那么由5可得加上$p$之后可以得到一个严格大于$|f|$的流,这与$f$是最大流矛盾。

    $(2)Rightarrow (3)$定义$S={vin V:在G_{f}中存在一条从s到v的路径}$,$T=V-S$,首先$sin S$。由于$G_{f}$中不存在增广路径,所以不存在s到t的路径,所以$t otin S$。所以$(S,T)$是G的一个切割。现在考虑一对节点$uin S,vin T$如果$(u,v)in E$,必有$f(u,v)=c(u,v)$,否则边$(u,v)$将把$v$置于集合$S$;如果$(v,u)in E$,必有$f(v,u)=0$,否则$c_{f}(u,v)=f(v,u)>0$,这使边$(u,v)in E_{f}$,从而使得$vin S$,所以

    $|f|=f(S,T)=sum_{uin S}sum_{vin T}f(u,v)-sum_{uin S}sum_{vin T}f(v,u)$

    $=sum_{uin S}sum_{vin T}c(u,v)-sum_{uin S}sum_{vin T}0$

    $=c(S,T)$

    $(3)Rightarrow (1)$ 根据8,对所有的切割$(S,T)$,$|f|leq c(S,T)$,所有若$|f|=c(S,T)$,那么$f$是一个最大流

    下一篇

  • 相关阅读:
    Ajax省市区无刷新单表联动查询
    Hadoop2.0、YARN技术大数据视频教程
    零基础DNET B/S开发软件工程师培训视频教程
    零基础DNET CS开发视频教程
    HTML5开发框架PhoneGap实战视频教程
    Web前端开发视频教程
    FluentData 轻量级.NET ORM持久化技术详解
    前端 MVVM 框架KnockOut.JS深入浅出视频教程
    ASP.NET Web开发项目实战视频教程
    零基础到CS开发高手通用权限管理系统全程实录
  • 原文地址:https://www.cnblogs.com/jianglangcaijin/p/6009066.html
Copyright © 2020-2023  润新知