EK算法复杂度分析

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

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

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

因此可以得到

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

那么显然边$(u,v) \notin 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]-1\le 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)$

posted @ 2019-03-03 18:28  uid001  阅读(2141)  评论(3编辑  收藏  举报