龙空技术网

掌握算法-图论-网络流问题

吃泡菜的鱼 44

前言:

此刻兄弟们对“算法图论ppt李建平”都比较珍视,朋友们都需要了解一些“算法图论ppt李建平”的相关资讯。那么小编同时在网上汇集了一些对于“算法图论ppt李建平””的相关文章,希望兄弟们能喜欢,我们快快来学习一下吧!

设给定边容量为Cvw的有向图G = (V,E)。这些容量可以代表一个管道的水的流量或在两个交叉路口之间马路上的交通流量。有两个顶点,一个是s,称为发电(source),一个是t,称为收点的(sink)。对于任一条边,最多有“流”的Cvw个单位可以通过。在既不是s又不是t的任一顶点v,总的进入的流必须等于总的发出的流。

最大流问题就是确定从s到t可以通过的最大流量。

一个图和它的最大流

上图中,最大流是5。顶点a有3个单位的流进入,他将这3个单位的流分转给c和d。顶点d从a和b得到3个单位的流,并把它们结合起来发送到t。一个顶点可以从它喜欢的任何方式结合和发送流,只要不违反边的容量以及保持六守恒(进入必须流出)。

一个简单的最大流算法

解决这种问题额首要想法是分阶段进行。我们从图G开始并构造一个流图Gf。Gf表示在算法的任意阶段已经达到的流。开始时Gf的所有边都没有流,我们希望当算法终止时Gf包含最大流。我们还要构造一个图Gr成为残余图,它表示对于每条边还能再贴见上多少流。对于每一条边,我们可以从容量中减去当前的流而计算出残余的流。Gr的边称为残余边。

在每个阶段,我们寻找图Gr中从s到t的一条路径,这条路径叫做增长路径(augmenting path)。这条路径上的最小值边就是可以添加到路径每一边上的流。我们通过调整Gf和重新计算Gr做到这一点。当发现在Gr中没有从s到t的路径时,算法终止。

初始配置如下:

从残余图中有许多从s到t的路径。假设我们选择s、b、d、t。此时我们可发送2个单位的流通过这条路径的每一边。这里我们约定:一旦注满(使饱和)一条边,则把这条边从残余图中除去。

于是我们得到:

下面我们可以选择路径s、a、c、t,该路径也容许2个单位的流通过,于是我们得到:

唯一剩下要选择的路径是s,a,d, t。这条路径容许一个单位的流通过。于是得到:

由于t从s出发是不可达到的,因此算法到此终止。结果正好5个单位的流是最大值。

但是如果我们一开始就选择路径s,a,d,t,这条路径容纳3个单位的流,如下图:

这样的话就使得残余图中再也没有送s到t的任何路径了。

为了使得算法更有效,我们需要让算法改变它的意向。为此,对于流图中具有流fvw的每一边(v,w),我们将在残余图中添加一条容量为fv,w的边(w,v)。事实上,我们可以通过以相反方向发回一个流而使算法改变它的意向。

还是从图开始选择增长通路s、a、d、t。

注意,在残余图中有些边在a、d之间有两个方向。或者还有一个单位的流可以从a导向d,或者有高达3个单位的流导向相反的方向----我们可以撤销流。现在算法找到流为2的增长通路,s、b、d、a、c、t。通过从d到a导入2个单位的流,算法从边(a,d)取走两个单位的流,因此本质上改变了它的意向。

于是我们得到图:

现在已经没有增长通路了,因此算法终止。

标签: #算法图论ppt李建平 #算法图论ppt李建平答案 #图论网络最大流算法