• 最大流学习笔记(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|)$

    下一篇

  • 相关阅读:
    sqlserver 批量删除所有表语句
    C# 中的委托和事件
    Oracle建立用户
    C# Linq获取两个List或数组的差集交集
    Linux下Redis安装与配置操作说明
    word缩印
    centos7上的postgresql10安装和配置
    numpy技巧
    发票二维码扫描增强_06_持续优化
    发票二维码扫描增强_05_构建目标二维码
  • 原文地址:https://www.cnblogs.com/jianglangcaijin/p/6013822.html
Copyright © 2020-2023  润新知