8.10 最大流最小割定理
文章目录
- 基本概念
- 定理:流小于等于割容量
- Max-Flow Min-Cut Theorem
基本概念
网络流Network Flow,是用来研究现实生活中的水、电、油、气、交通、互联网等网络结构流量的数学分支。用图论抽象网络流模型,就是流网络。
流网络Flow Network,也叫传输网络Transport Network,是一种连通的无负权重的有向简单图。权重是用来代表容量的。
容量capacity,用cijc_{ij}cij表示节点iii到节点jjj的容量。
起点source vertex,终点sink vertex。
流量Flow,下面这张图表示了流量与容量的区别(这个图被很多地方“复用”,比如普林斯顿大学、印度理工学院等,我这里用的是普林斯顿大学的图):
饱和边Saturated edge,流量等于容量的边,被称为饱和边。上图中3→63\to63→6就是一条饱和边。
流模式Flow Pattern,所有边流量都确定后,放入一个集合中,这个集合就叫流模式。
最大流模式Maximal Flow Pattern,起点的流出和终点的流入是相等的,记为w,使得w最大的流模式,叫做最大流模式。
割cut,割就是把流网络中的节点拆分为非空的两个子集,一个包含起点s,一个包含终点t,割的符号为(P,P‾)(P,\overline{P})(P,P)。如下图就是一种割方案(图片来自普林斯顿大学):
割的容量Capacity of a Cut,符号为c(P,P‾)c(P,\overline{P})c(P,P),是割的边界处的容量和,反向的需要按负数计算。
定理:流小于等于割容量
这个定理里的流是指由起点s到终点t的流,也就是起点出发的所有边的流总和,或到终点的所有边的流总和,记为www。定理是说在任何割里,起点到终点的流都要小于割容量。用数学语言表示就是w≤c(P,P‾)w\le c(P,\overline{P})w≤c(P,P)。这个的下面我给出证明。
首先对于中间节点j,流入等于流出:
∑i≠jfji−∑i≠jfij=0\sum_{i\neq j}f_{ji}-\sum_{i\neq j}f_{ij}=0 i=j∑fji−i=j∑fij=0
对于起点s,流出减去流入等于净流量w。
∑i≠sfsi−∑i≠sfis=w\sum_{i\neq s}f_{si}-\sum_{i\neq s}f_{is}=w i=s∑fsi−i=s∑fis=w
P里的点就两种,s和中间节点,把上面两个公式全部加起来,就是若干个0和一个w。所以可以得到这个公式:
∑k∈P,i∈Gfki−∑k∈P,i∈Gfik=w\sum_{k\in P, i \in G}f_{ki}-\sum_{k\in P, i \in G}f_{ik}=w k∈P,i∈G∑fki−k∈P,i∈G∑fik=w
再把上式中的i区分为来自PPP和P‾\overline{P}P,就有了:
∑k∈P,i∈Pfki+∑k∈P,i∈P‾fki−∑k∈P,i∈Pfik−∑k∈P,i∈P‾fik=w\sum_{k\in P, i \in P}f_{ki}+\sum_{k\in P, i \in \overline{P}}f_{ki}-\sum_{k\in P, i \in P}f_{ik}-\sum_{k\in P, i \in \overline{P}}f_{ik}=w\\ k∈P,i∈P∑fki+k∈P,i∈P∑fki−k∈P,i∈P∑fik−k∈P,i∈P∑fik=w
把整个P视为一个节点,其内部的流量相加肯定是0的,只往外流出w,所以其内部流量总和为0,所以有:
∑k∈P,i∈Pfki−∑k∈P,i∈Pfik=0\sum_{k\in P, i \in P}f_{ki}-\sum_{k\in P, i \in P}f_{ik}=0 k∈P,i∈P∑fki−k∈P,i∈P∑fik=0
两个式子抵消下,有:
∑k∈P,i∈P‾fki−∑k∈P,i∈P‾fik=w\sum_{k\in P, i \in \overline{P}}f_{ki}-\sum_{k\in P, i \in \overline{P}}f_{ik}=w k∈P,i∈P∑fki−k∈P,i∈P∑fik=w
这个公式就是说对于割,PPP流入P‾\overline{P}P减去P‾\overline{P}P流入PPP等于净流量w。这么复杂的数学过程等于证明了一句废话。P‾\overline{P}P流入PPP的流量,也就是∑k∈P,i∈P‾fik\sum_{k\in P, i \in \overline{P}}f_{ik}∑k∈P,i∈Pfik是个非负数,所以有:
w≤∑k∈P,i∈P‾fki∵∑k∈P,i∈P‾fki≤∑k∈P,i∈P‾cki=c(P,P‾)∴w≤c(P,P‾)w \le \sum_{k\in P, i \in \overline{P}}f_{ki}\\ \because \sum_{k\in P, i \in \overline{P}}f_{ki}\le \sum_{k\in P, i \in \overline{P}}c_{ki}=c(P,\overline{P})\\ \therefore w \le c(P,\overline{P}) w≤k∈P,i∈P∑fki∵k∈P,i∈P∑fki≤k∈P,i∈P∑cki=c(P,P)∴w≤c(P,P)
Q.E.D.(证明完毕)
Max-Flow Min-Cut Theorem
该定理在1956年由Ford-Fulkerson提出,内容是最大流等于最小割容量。上面那个定理是对于任何割法,流都小于割容量。现在是说只要找到最小的割容量的割方案,就找到了最大流。下面我给出证明:
从流小于等于割容量的证明过程,我们有:
w≤∑k∈P,i∈P‾fki≤∑k∈P,i∈P‾cki=c(P,P‾)w \le \sum_{k\in P, i \in \overline{P}}f_{ki}\le \sum_{k\in P, i \in \overline{P}}c_{ki}=c(P,\overline{P}) w≤k∈P,i∈P∑fki≤k∈P,i∈P∑cki=c(P,P)
因为最大流是一个固定的数字。我们只要证明上述不等式存在两个等号同时满足的场景就可以了。第一个不等式满足的条件是什么?是下列条件:
∑k∈P,i∈P‾fik=0\sum_{k\in P, i \in \overline{P}}f_{ik}=0 k∈P,i∈P∑fik=0
也就是从P‾\overline{P}P流入P的流量为0。也就是这个割反向流量为0。那另一个等号呢?就是割的流量等于容量,也就是割的边界全部是饱和边。所以证明的难点就在这里,既要证明存在,又要证明这时候反向流量为0。首先,一个流网络肯定存在一个最大的流模式的。假设这个流模式下的流量为w∗w^*w∗,也就是把最大流定义为w∗w^*w∗。
然后我们定义一个割(P∗,P‾∗)(P^*,\overline{P}^*)(P∗,P∗),定义如下规则:
1. s∈P∗s\in P^*s∈P∗
2. 然后按以下方式递归找P∗P^*P∗中其他点:对于P∗P^*P∗中的i,如果存在j,使得fij<cijf_{ij}\lt c_{ij}fij<cij或fji>0f_{ji}\gt0fji>0,那么把j放入P∗P^*P∗中。
fji>0f_{ji}\gt0fji>0的点全部在P∗P^*P∗中,这样就保证了反向流量为0。fji<cjif_{ji}\lt c_{ji}fji<cji或fij<cijf_{ij}\lt c_{ij}fij<cij保证了不饱和的边不会出现在边界上。这样递归下去肯定可以的,如果不存在满足条件的点,至少还有s嘛。但是会有个问题,会不会包含t呢?如果包含了终点t,那么就证明不存在这样的割。所以现在只需要证明上述方案不会包含t就可以了。
如果t包含进去了,那么t肯定是按上述的规则链被包含进去的,那么找到t的过程,就定义为一个路径s,v1,v2,…,vi,vi+1,…,ts,v_1,v_2,\dots,v_i,v_{i+1},\dots,ts,v1,v2,…,vi,vi+1,…,t,这条路径上所有的边,要么是反向边,要么是正向的不饱和边。把这条路径上的最小容量余量cvjvj+1−fvjvj+1c_{v_jv_{j+1}}-f_{v_jv_{j+1}}cvjvj+1−fvjvj+1,定义为β1\beta_1β1,把最小的反向容量定义为β2\beta_2β2,把β\betaβ定义为min(β1,β2)min(\beta_1,\beta_2)min(β1,β2)。这个时候把这个路径上每个正向边的流量增加β\betaβ,同时每个反向边的流量减少β\betaβ,因为是从s出发的,所以守恒,这样增加是没问题的。这个时候图的流量增加了β\betaβ,与此时流量w∗w^*w∗为图的最大流量矛盾。
Q.E.D.(证明完毕)
8.10 最大流最小割定理相关推荐
- hihocoder 网络流二·最大流最小割定理
网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? ...
- Cable TV Network POJ - 1966 最大流最小割定理 点边转化
最大流最小割定理 任何一个网络的最大流量等于最小割中边的容量之和 即最大流等于最小割 点边转化 节点可以拆为入点和出点 把点的属性添加到入点和出点之间的边上 图的边也可以分两截 在中间加一个节点 把边 ...
- UVA-10480 Sabotage(最大流最小割定理+输出路径)
题目链接:UVA-10480 Sabotage The regime of a small but wealthy dictatorship has been abruptly overthrown ...
- nyoj 677 碟战(最大流最小割定理)
碟战 时间限制:2000 ms | 内存限制:65535 KB 难度:4 描述 知己知彼,百战不殆!在战争中如果被敌人掌握了自己的机密,失败是必然的.K国在一场战争中屡屡失败,就想到自己的某些城市 ...
- 最大流最小割定理(max flow/min cut theory)
百度文库里面有个地址,讲的比较详细. http://wenku.baidu.com/link?url=gPXhYCduLNgZaOkKIltNDAgPGwuMTpRX7a0utvVFuqDAP9o1j ...
- GraphCut、最大流最小割定理
G=(V,E):V为点集,E为边集: 节点集V中的节点分为: (1)终端节点.不包含图像像素,用S和T表示.S为源点,T为汇点.图像分割中通常用S表示前景目标,标签设为1:T表示背景,标签为0. (2 ...
- 流网络的最小割问题c语言,网络流基础-最大流最小割定理
最大流最小割定理,指网络流的最大流等于其最小割. 最大流指符合三个性质的前提下,从S到T能流过的最大流量. 最小割指符合割的定义,最小的割容量. 求最大流: 不断寻找增广路,计算能增加的最小流量,然后 ...
- 网络流(二)——最大流最小割定理
最小割 <1>什么是割? 引例:你的仇人是一个工厂老板.你要炸掉一些车,让他每个货物都运不到销售点. 炸掉越大的车,你越容易被发现.你希望炸掉的车的容量之和尽量小. ...
- hihoCoder 1378 网络流二·最大流最小割定理 (网络流学习#2 记录)
题目链接:http://hihocoder.com/problemset/problem/1378 代码: #include<bits/stdc++.h> using namespace ...
最新文章
- 验证码在服务器不显示
- 【产品干货】Uber产品经理首次在中国自述产品理念:我们看中的并非只是钱
- EasyUI中搜索框的简单使用
- 如果你的船不进来,就游出去迎接它 乔纳森温特斯
- 担保债务凭证(Collateralized Debt Obligation,简称CDO) CLO/CBO
- qt linux 串口eventdriven,详解 Qt 串口通信程序全程图文 (1)
- 【UVA - 11383】Claw Golden Tiger (二分图最优匹配,KM算法原理)
- 远程桌面登录 Windows Server 2003时提示无权限
- java plug机制_【maven实战】20-插件解析机制
- mysql双向复制_MySQL 双向复制
- 【译】jquery基础教程(jQuery Fundamentals)——(第一部分)概述
- java 反射 动态调动set_通过Java的反射动态调用类的set和get方法
- cocos2dx 3.16 VS+BabeLua lua环境配置与代码调试
- 也评 阿里 P10 赵海平对王垠的面试
- 图像补全(image inpainting)
- Dewplayer MP3网页播放器
- boost::python::detail::destroy_referent相关的测试程序
- 电子商务网站用户行为分析及服务推荐
- android联系人中英文混合排序
- 计算机英语背单词技巧,闽教小学英语快速单词记忆法,怎么背单词下午、计算机、教室、长颈鹿、请...
热门文章
- 12306订票客户端 FOR .NET 演示项目 【1】项目概况
- 大型计算机游戏排行榜,iOS大型游戏
- 人工智能、深度学习和AIoT
- 小程序关联微信公众号如何确定用户的唯一性
- 不错的2007年电子记账本
- 〔魅惑之都〕电脑操作最忌讳的十八个小动作!!用电脑的请注意看哟~~
- 50行代码完成微信小程序-跳一跳辅助工具,让你成为朋友圈最靓的仔
- 测试通达信指标胜率的软件,选股指标成功率测试工具(源码 副图/预警 通达信)非常实用...
- C语言修改同花顺程序吗,炒股软件哪家强?第一篇——同花顺
- 【从零开始学习人工智能】人工智能简介 - 07机器学习