zoukankan      html  css  js  c++  java
  • 最大流学习笔记(4)-推送重贴标签算法二

    上一篇

    14 设$f$是流网络G的一个预流,那么对于任意一个溢出节点$x$,在$G_{f}$中存在一条从$x$到源点$s$的简单路径。

    15 在GENERIC-PUSH-RELABEL的整个过程中,任何一个$uin V$,$u.hleq 2|V|-1$

    16  在GENERIC-PUSH-RELABEL的整个过程中,每个节点被重贴标签次数最多为$2|V|-1$,所有重贴标签次数不会超过$(2|V|-1)(|V|-2)<2|V|^{2}$.由15可知,$s,t$不会被重贴标签,所以只有$|V|-2$个节点会被重贴标签,每个节点的高度最大为$2|V|-1$,而每次重贴标签至少使得高度增加1,所以每个节点最多执行$2|V|-1$ 次重贴标签操作,所以总的重贴标签操作次数不超过$(2|V|-1)(|V|-2)$ 

    17 在GENERIC-PUSH-RELABEL的整个过程中,饱和推送的次数少于$2|V||E|$ 

    18 在GENERIC-PUSH-RELABEL的整个过程中,非饱和推送的次数少于$4|V|^{2}(|V|+|E|)$ 

    19  由16,17,18可知,GENERIC-PUSH-RELABEL算法的复杂度为$O(V^{2}E)$

    以下是证明

    14的证明

    对于溢出节点$x$,设$U={v:在G_{f}中存在从x到v的简单路径}$,$overline{U}=V-U$,现在假设$s otin U$,也就是说$sin overline{U}$

    $0<sum_{uin U}e(u)=sum_{uin U}(sum_{vin V}f(v,u)-sum_{vin V}f(v,u))$

    $=sum_{uin U}((sum_{vin U}f(v,u)+sum_{vin  overline{U}}f(v,u))-(sum_{vin U}f(u,v)+sum_{vin  overline{U}}f(u,v)))$

    $=sum_{uin U}sum_{vin U}f(v,u)+sum_{uin U}sum_{vin  overline{U}}f(v,u)-sum_{uin U}sum_{vin U}f(u,v)-sum_{uin U}sum_{vin  overline{U}}f(u,v)$

    $=sum_{uin U}sum_{vin  overline{U}}f(v,u)-sum_{uin U}sum_{vin  overline{U}}f(u,v)$

    也就是说$sum_{uin U}sum_{vin  overline{U}}f(v,u)-sum_{uin U}sum_{vin  overline{U}}f(u,v)>0$,由于$sum_{uin U}sum_{vin  overline{U}}f(u,v)geq 0$,所以$sum_{uin U}sum_{vin  overline{U}}f(v,u)>0$,因此至少存在一个$u^{'}in U,v^{'}in overline{U}$满足$f(v^{'},u^{'})>0$,那么就有一条残存边$(u^{'},v^{'})$,也就是说$x$到$v^{'}$存在路径。与开始的假设矛盾。

    15的证明

    首先,源点和汇点从来不会溢出,所以它们的高度不会改变。它们一开始的高度都不比$2|V|-1$大。

    对于任意节点$uin V-{s,t}$,初始时高度都是0.且仅当每次被重贴标签时,高度才会被改变。这时,根据14,存在从$u$到源点的简单路径$p=<v_{0},v_{1},...,v_{k}>$,$kleq |V|-1$,$v_{0}=u,v_{k}=s$,由于$v_{i}$ 比$v_{i+1}$的高度最多大1,所以$v_{0}$的高度比$v_{k}$最多大$k$,所以$u.h=v_{0}.hleq k+|V|leq 2|V|-1$

    17的证明

    对于任意一条边$(u,v)$,假设从$u$到$v$进行了一次饱和推送,那么此时$v.h=u.h-1$,那么下一次的饱和推送如果发生,一定是$v$到$u$,此时$v.h=u.h+1$,由于在这中间$u.h$不会减小,所以第二次饱和推送发生时,$v.h$的高度至少增加2.而$v.hleq 2|V|-1$,所以对于$v$到$u$的饱和推送次数小于$|V|$,同理$u$到$v$的饱和推送次数也是小于$|V|$,所以一条边上进行的饱和推送小于$2|V|$,所以总的饱和推送次数小于$2|V||E|$

    18的证明

    定义一个函数$Phi =sum_{v:e(v)>0}v.h$。初始时$Phi=0$.$Phi$的值在每次重贴标签、饱和推送、非饱和推送之后都可能发生改变。

    (1)重贴标签:对于一个节点$u$,其所有的重贴标签操作可以导致$Phi$增大的值小于$2|V|$,因为节点$u$的高度最大为$2|V|-1$

    (2)饱和推送:每次饱和推送作用于$u$到$v$后,$v$可能溢出,这时$v$的溢出可导致$Phi$增加的值小于$2|V|$,因为节点$v$的高度最大为$2|V|-1$

    (3)非饱和推送:每次饱和推送作用于$u$到$v$后,$u$不再溢出,较少了$u.h$,而$v$可能溢出也可能不溢出($v$是源点的时候就不会溢出),即使$v$溢出,可使得$Phi$增加$v.h$,由于$u.h-v.h=1$,所以每次非饱和推送至少使得$Phi$减少1.

    $Phi$总的增加小于$(2|V|)(2|V|^{2})+(2|V|)(2|V||E|)=4|V|^{2}(|V|+|E|)$,而非饱和推送导致的$Phi$的减少也不会超过$Phi$的增加,所以非饱和操作的次数小于$4|V|^{2}(|V|+|E|)$

    下一篇

  • 相关阅读:
    BZOJ 2212/BZOJ 3702
    BZOJ 4761 Cow Navigation
    BZOJ 3209 花神的数论题
    BZOJ 4760 Hoof, Paper, Scissors
    BZOJ 3620 似乎在梦中见过的样子
    BZOJ 3940 Censoring
    BZOJ 3942 Censoring
    BZOJ 3571 画框
    BZOJ 1937 最小生成树
    BZOJ 1058 报表统计
  • 原文地址:https://www.cnblogs.com/jianglangcaijin/p/6013822.html
Copyright © 2011-2022 走看看