网络流分析

Posted wizarderror

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络流分析相关的知识,希望对你有一定的参考价值。

 

Ford-Fulkerson算法

 

 

残量网络

  从直观上看,给定网络$G$和流量$f$,残量网络$G_f$由那些仍有空间对流量进行调整的边构成。流网络允许的额外流量等于其容量减去该边的流量:$c_f(u, v) = c(u, v)-f(u, v)$,差值为正则将这条边置于图$G_f$中。由于只允许有额外流量的边加入图$G_f$,若$c_f(u,v)=0$的话,则该边不属于图$G_f$。

  残留网络$G_f$还可能包含图$G$中不存在的边。算法对流量进行操作的目标是增加总流量,为此,算法可能对某些特定边上的流量进行缩减。为了表示对于一个正流量$f(u, v)$的缩减,我们将边$(v,u)$加入到图$G_f$中,并将其残存容量设为$c_f(v, u)=f(u, v)$。也就是说,一条边能允许的反向流量最多将其正向流量抵消。图$G_f$中的反向边允许将发送过来的流量发送回去,等同于缩减该条边的流量,也称为抵消操作。这类抵消操作对任何最大流算法都是非常关键的,在许多算法中也都是必须的。

  更形式化地,考虑结点对$u, vin V$,残量容量$c_f(u, v)$如下:

$$c_f(u, v)=left{egin{matrix}
c(u,v)-f(u,v) & if (u,v)in E 
f(u,v)& if (v,u)in E 
0& Others
end{matrix} ight.$$

下图为给定网络$G$和其残量网络$G_f$:

技术图片

(通俗的来讲,无论对于残量网络中哪条边,都表示其还能再有多少流量经过。只不过可能含义不同。$(u, v)$的含义是增加这条边的流量,$(v, u)$的含义为减少这条边的流量,它们都能对流量进行调整)

增广路径 

给定网络$G=(V, E)$和流$f$,增广路径$p$是残量网络中一条从源结点$s$到汇点$t$的简单路径。

我们在一条增广路径$p$上能够为每条边增加的流量的最大值为:

$$c_f(p) = minleft { c_f(u, v): (u, v)in route p ight }$$

流网络的切割

  $Ford-Fulkerson$算法核心是沿着增广路径重复增加路径上的流量,知道找到一个最大流为止。我们怎么知道在算法终止时,确实找到一个最大流呢?而最大流最小割定理告诉我们,一个流是最大流当且仅当其残量网络不包含任何增广路径。

我们先来看一下流网络中的切割概念,做一点小分析。

网络流$G=(V, E)$中一个切割$(S, T)$将节点集合$V$划分为$S$和$T=V-S$两个集合,使得$sin S, tin 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)$$

一个网络的最小切割是整个网络中容量最小的切割

如下图1-2所示,从$s$运送到$t$的物品必然通过跨越$S$和$T$的边,则有:

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

技术图片

             图1-1                        图1-2

 

[最大流最小割定理设$f$为流网络$G=(V, E)$中的一个流,该流网络的源节点是$s$,汇点为$t$,则下列条件是等价的:

  1.$f$是$G$的一个最大流。

  2.残量网络$G_f$不包括任何增广路径。

  3.$|f|=c(S, T)$,其中$(S, T)$是流网络$G$的某个切割

简要证明如下:

如果$G_f$不包含任何增广路径,即不存在$s$到$t$的路径。我们定义$S = left { vin V: G_f中存在s到v的路径 ight }$,$T=V-S$。显然划分$(S,T)$是流网络$G$的一个切割。

对于一对结点$uin S$和$vin T$。若$(u, v)in E$,则必有$f(u, v)=c(u, v)$;若$(v, u)in E$,则必有$f(u, v)=0$。否则,在残量网络$G_f$中就有跨越集合$S$到到$T$的边,和不包含增广路径的条件是相悖的。

于是我们就得到了:

$$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)$$

又对所有切割$(S,T)$,都满足$|f|leqslant c(S, T)$,即$|f|_{max}leqslant c(S, T)_{min}$。稍加证明就可以得到:在增广路算法结束时,$f$是$s-t$的最大流,$(S,T)$是图的$s-t$最小割

以上是关于网络流分析的主要内容,如果未能解决你的问题,请参考以下文章

RTMP协议抓包分析拉流过程

网络流分析

网络流分析

webrtc 上用于远程流的网络音频分析器

网络流初步——增广路代码的分析

技术流:网络调试工具Fiddler介绍 流量监视分析工具