图论动画-Ford-Fulkerson 最大流算法17页
- 格式:ppt
- 大小:391.00 KB
- 文档页数:16
1、Ford-Fulkerson 算法 算法描述: STEP0:置初始可行流。
STEP1:构造原网络的残量网络,在残量网络中找s -t 有向路。
如果没有,算法得到最大流结束。
否则继续下一步。
STEP2:依据残量网络中的s -t 有向路写出对应到原网络中的s -t 增广路。
对于增广路中的前向弧,置s(e) ←u(e)- f(e)。
对于反向弧,置s(e) ←f (e )。
STEP3:计算crement=min{s (e 1),s (e 2),…,s (e k )};STEP4:对于增广路中的前向弧,令f(e) ←f(e)+crement ;对于其中的反向弧,令f(e)←f(e)-crement ,转STEP1。
这里f 代表弧上的当前流量,s 表示弧上可增广的量。
在STEP2的残量网络中,寻找s -t 有向路的算法有两种,DFS 和BFS ,即深度优先和宽度优先算法。
算法的时间复杂度为O(mnU)。
其中m 为弧的数目,U 为弧上容量的最大上界,是伪多项式算法。
邻接表表示图,空间复杂度为O(n+m)。
DFS 和BFS 的比较例子:图4.8.6假设M 是弧上的最大容量,且是一个非常大的整数,DFS 算法的最坏情况会选择S ->A ->B ->T 和S ->B ->A ->T 进行增广,增广的次数为2M ,这个问题用BFS 算法,沿S ->A ->T 和S ->B ->T 增广两次就可以完成。
见图4.8.6。
2、最大容量增广路算法Ford-Fulkerson 算法每次只是在所有增广路中随机地找一条增广路进行增广,因此增广的次数可能很多。
如果每次都找到一条可增广的容量最大的增广路,则总的增广次数应当减少,这样的算法称为最大容量增广路算法。
最大容量增广路算法寻找增广路的步骤如下:STEP0:将s 点可增广值maxf 标记为一个非常大的数,其他节点的maxf 值为0,所有节点标记为未扩展。
最优化方法上机实验3求网络最大流及最小费用最大流问题的Ford-Fulkerson标号算法上机时间:2014.01.07实验日期: 2014年1月7日••••••••••••••••••【唯美句子】走累的时候,我就到升国旗哪里的一角台阶坐下,双手抚膝,再闭眼,让心灵受到阳光的洗涤。
懒洋洋的幸福。
顶 3 收藏 2•【唯美句子】一个人踮着脚尖,在窄窄的跑道白线上走,走到很远的地方又走回来。
阳光很好,温暖,柔和。
漫天的安静。
顶7 收藏7•【唯美句子】清风飘然,秋水缓淌。
一丝云起,一片叶落,剔透生命的空灵。
轻轻用手触摸,就点碎了河面的脸。
落叶舞步婀娜不肯去,是眷恋,是装点?瞬间回眸,点亮了生命精彩。
顶11 收藏9•【唯美句子】几只从南方归来的燕子,轻盈的飞来飞去,“几处早莺争暖树,谁家新燕啄春泥,”其乐融融的山林气息,与世无争的世外桃源,让人心旷神怡。
顶0 收藏 2•【唯美句子】流年清浅,岁月轮转,或许是冬天太过漫长,当一夜春风吹开万里柳时,心情也似乎开朗了许多,在一个风轻云淡的早晨,踏着初春的阳光,漫步在碧柳垂青的小河边,看小河的流水因为解开了冰冻而欢快的流淌,清澈见底的的河水,可以数得清河底的鹅软石,偶尔掠过水面的水鸟,让小河荡起一层层的涟漪。
河岸换上绿色的新装,刚刚睡醒的各种各样的花花草草,悄悄的露出了嫩芽,这儿一丛,那儿一簇,好像是交头接耳的议论着些什么,又好象是在偷偷地说着悄悄话。
顶 3 收藏 4•【唯美句子】喜欢海子写的面朝大海春暖花开,不仅仅是因为我喜欢看海,还喜欢诗人笔下的意境,每当夜深人静时,放一曲纯音乐,品一盏茶,在脑海中搜寻诗中的恬淡闲适。
在春暖花开时,身着一身素衣,站在清风拂柳,蝶舞翩跹的百花丛中,轻吹一叶竖笛,放眼碧波万里,海鸥,沙滩,还有扬帆在落日下的古船,在心旷神怡中,做一帘红尘的幽梦。
顶0 收藏 2•【唯美句子】繁华如三千东流水,你只在乎闲云野鹤般的采菊东篱、身心自由,置身置灵魂于旷野,高声吟唱着属于自己的歌,悠悠然永远地成为一个真真正正的淡泊名利、鄙弃功名利禄的隐者。
1、图上的流动 - flow定向图的要素,顶点集V={x,y,z,…},定向边E={xy,yz,…},其中:xy表示由x 指向y的一条边,所以xy不一定等于yx。
图上的流是一个函数,对每一条边指定一个非负实数,即流量,记作f(xy)。
因而图上的流也可以看作一个函数:对于图上的顶点x来说,将通过x的流分作两类。
其一是由x流出,即形如xy的边。
另一类是流入,即形如zx的边。
图上给定一个流f,则可将图上的顶点分作3类。
(1)流出的量等于流入的量。
(2)流出的量大于流入的量,这样的顶点称作源,source,用记号s来表示。
(3)流出的量小于流入的量,这样的顶点称作汇,sink,用记号t来表示。
因而,除掉源和汇,其他的顶点没有产生额外的流量,也没有流消失。
为简单起见,本文总是假设源和汇各自都只有一个。
实际上,有多个source或者sink的流很容易归结为只有一个的情形。
容易证明,流出source的流量等于流入sink的流量,这个数称为流f的流量。
例子:电路。
其中的源就是电源,包括发电机。
其中的汇就是消耗电能的设备。
当然,这里假定电路本身没有电力的损耗。
通常,线路上的流有容量限制。
确切的说,定向图上的每一条定向边xy,都对应到一个非负实数C(xy),即容量。
在一个定向图中,给定每条边的容量,我们能否找到满足某些条件的流f,使得对每一条边xy,都有f(xy)<=C(xy)。
比如,在所有的满足限制条件f(xy)<=C(xy)的流中,是否存在一个具有最大流量的流。
当然这是一个初等而简单的问题,其证明类似于数学分析中所有与紧性有关的定理。
首先,满足上述限制条件的流,其流量有一个绝对的一致上界,因而存在一个最小上界。
因而就可以找到流的一个序列f_n,使得f_n的流量趋向于这个最小上界。
序列f_n一定有一个子序列收敛到某个流,这个流就具有最大流量。
所以,具有容量限制的定向图上,一定存在最大流。
2、最大流最小割定理(max-flow min-cut theorem)定向图(V,E),V为顶点集,E为定向边的集合。