最大流

参考:最大流(Maximum Flow)

流网络

流网络G(V,E)是一个有向图,每条边有一个非负的容量值c,且每条边没有重边(反向边)。如果两个节点没有边,为了方便我们设置其流量值为0
在流网络的所有节点中,我们特别地有两个节点:源节点s汇点t。我们假定每个节点都在s和t之间,从而形成一个流

对于流网络,我们有两个性质:
1.容量守恒:对于所有节点间,两点流量小于等于其间容量
2.流量守恒:流进一个节点的流量等于流出这个节点的流量。

边上的数值:分子表示流,分母表示容量

问题描述

在最大流问题中,给定一个流网络G、一个源节点s、一个汇点t,希望找到一个值最大的一个流

Ford-Fulkerson方法

这个方法依赖于三种重要思想:残存网络,增广路径,切割

残存网络

对节点u、v,定义残存容量为

残存网络可能包含图G中不存在的边,残存网络中的反向边允许算法将已经发送出来的流量发送回去。一个残存网络示例图如下:

图a是一个流网络,b是a对应的残存网络
注意每条边上的值,残存网络中针对每条正向边计算出该条边在存在流的情况下的剩余容量,并画出一条反向边,反向边的容量即是发出流的大小,方便将发出的流运输回发送地,并将权重为0的边省略。

残存网络是如何增大原始流网络中的流的一种指示
如果f是G的一个流,对应的有一个残存网络,残存网络中我们可以定义一个流 f ’
又定义一个函数,为流f’对流f的增量(或递增),它是一个VxV到R的函数

增广路径

给定流网络G和流f,增广路径p是残存网络中一条从源结点s到汇点t的简单路径
我们称在一条增广路径p上能够为每条边增加的流量的最大值为路径p的残存容量。表示为cf(p)

引理 设G为一个流网络,设f为图G中的一个流,设p为残存网络中的一条增广路径。定义一个函数如下:

fp为残存网络的一个流,其值大于0
有了增广路径,使得我们找到的流更接近于最大流

切割

Ford算法核心就是沿着增广路径重复增加路径上的流量,直到找到一个最大流为止。但我们怎么知道找到了呢?
定理:一个流是最大流当且仅当其残存网络不包含任何增广路径

切割:一个切割(S,T)将图G(V,E)的节点集合V划分为S和T=V-S两个集合,使得节点s属于S,t属于T。
若f为一个流,则定义横向切割(S,T)的净流量f(S,T)如下:

切割(S,T)的容量是:

一个网络的最小切割是整个网络中容量最小的切割。
如对于这个流网络:

该切割净流量:

该切割的容量:(只看从s到t方向的容量)

引理 设f为流网络G的一个流,该流网络的源结点为s,汇点为t,设(S,T)为流网络G的任意切割,则横跨切割(S,T)的净流量为f(S,T)= |f|。

推论 流网络G中任意流f的值不能超过G的任意切割的容量。

最大流最小切割定理

设f为流网络G=(V,E)中的一个流,该流网络的源结点为s,汇点为t,则下面的条件是等价的:

  1. f是G的一个最大流。
  2. 残存网络不包含任何增广路径
  3. |f|=c(S,T),其中(S,T)是流网络G的某个切割。

因为一个流不可能大于一个切割容量,当一个切割容量最小时,其值就为最大流的大小

基本的Ford算法

在Ford-Fulkerrson方法的每次迭代中,寻找某条增广路径p,然后使用p来对流f进行修改(增加)。找到一条增广路径后有对应的fp,将其添加到f中,知直到找不到一条增广路径p为止。

伪代码

1-2行:初始化流
3-8行:在残存网络中寻找一条增广路径p,然后使用残存容量cf(p)来对流f加增。
因为路径p上每条残存边要么是原来网络中一条边,要么是原来网络中一条反向边。
故6-8行:如果残存边为原来一条边,加增流量;为反向边,减流量。
当没有增广路径p时,流f就是最大流

算法运行时间取决于寻找增广路径的时间,当我们使用基于广度优先搜索的算法时,此时称Ford算法为Edmonds-Karp算法,算法时间复杂度为O(V*E^2)

示例

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容