zoukankan      html  css  js  c++  java
  • EK算法复杂度分析

    引理: EK算法每次增广使$s$到所有顶点$vin V-{s,t}$的最短距离$d[v]$增大.

    采用反证法, 假设存在一个点$vin V-{s,t}$, 使得$d'[v]< d[v]$.

    取$v$为第一个使最短距离减小的点, 设增广后的图$G'$中路径$sleadsto u ightarrow v$为$s$到$v$的最短路

    因此可以得到

    $$d[u]=d[v]-1, d'[u]ge d[u]$$

    那么显然边$(u,v) otin E$, 因为若$(u,v) in E$, 则有

    $$d[v]le d[u]+1 le d'[u]+1 = d'[v]$$

    与假设矛盾.

    故EK算法一定是增加了流$f(v,u)$, 即边$(v,u)$在$G$的最短路上, 固有

    $$d[v]=d[u]-1le d'[u]-1=d'[v]-2$$

    与假设矛盾, 故引理成立.

    定理: EK算法最多增广次数为$O(VE)$.

    若增广路$p$的残留容量等于边$(u,v)$的残留容量, 则称边$(u,v)$是增广路$p$的关键边, 下面用引理证明每条边最多做关键边$frac{|V|}{2}-1$次.

    对于关键边$(u,v)$, 由于$(u,v)$在最短路上, 有

    $$d[v]=d[u]+1$$

    而增广后, $(u,v)$将从$G$中消失, 重新出现的条件是$(v,u)$出现在增广路上.

    则有

    $$d'[u]=d'[v]+1$$

    由引理知道

    $$d'[v]ge d[v]$$

    故有

    $$d'[u]ge d[v]+1=d[u]+2$$

    所以每次出现至少会使最短距离$+2$, 而其距离最大为$|V|-2$, 所以每条边最多做关键边$frac{|V|}{2}-1$次, 总的增广次数就为$O(VE)$.

    所以采用BFS进行增广的话, EK算法将达到复杂度$O(VE^2)$

  • 相关阅读:
    Stock Transfer I
    Negative Stock in "Stock in Transit"
    ZFINDEXITS
    Plan Driven Procurement III: Classic Scenario in SRM 5.0
    C++builder 创建进程之CreateProcess函数
    常用DOS命令
    【转】程序员的几个级别
    几本书
    OOP SOLID原则
    SSRS 使用总结
  • 原文地址:https://www.cnblogs.com/uid001/p/10465580.html
Copyright © 2011-2022 走看看