最大流最小割算法

图像分割中用到最小割原理,引出了最大流最小割算法,主要参考来自UCLA CIVS的Hong Chen的PPT 《Introduction to Min-Cut/Max-Flow Algorithms》

一、 首先借用PPT的两张图分别讲述一下两者的应用

1. 最大流应用于网络传输

2. 最小割应用于桥问题

二、基本概念之 s-t 图

1. 源结点(source node)和汇结点(sink node)

2. 从结点i到结点j的有向边(Arc)<i, j>

3. 每条边<i, j>有非负的容量cap(i, j)

4. cap(i, j) = 0 表示没有边

三、s-t 图中的流概念

流是一个实数函数,为每条边<i, j>赋值 f(i, j),流具有如下一些属性:

1. 容量限制: f(i, j) <= cap(i, j)

2. Mass balance constraint (质量守恒约束,暂时如此翻译),如下公式表示:

  • 所有从源点出发的边的流量之和 - 所有到源点的边的流量 = 流量的值
  • 所有从汇点出发的边的流量之和 - 所有到汇点的边的流量 = 负的流量值
  • 所有非源点和非汇点出的边的流量之和 - 到这些点的边的流量之和 = 0

以下是流量的一个例子,源点出发的 2+3,到源点的为0,则流量为5,,类似推理其他点

引出最大流的概念,所有可能的流函数中拥有最大值的流

四、基本概念之s-t Cut

引入割(Cut)的概念,将拥有源点s和汇点t的结点集合V分成两个子集S和T,当且仅当s属于S且t属于T时,称这种分割为Cut。如下图中左图为割,右图则不是。

五、s-t割的容量

s-t的容量cap([S, T]) 指的是所有从S到T的边界的容量和,具体公式如下:

下面是个例子,注意此外只计算从S到T的,不计算T到S的

引出最小割(minimum cut)的概念,所有可能的s-t割中容量最小的s-t割。

六、基本概念之Flow Across s-t Cut(理解为交叉流s-t Cut)

所有从S中的结点到T中结点流之和 - 所有从T中的结点到S中的结点的流之和。

下图是个例子,此处计算从S到T和T到S。

七、s-t图的性质

1. 对于任意的s-t割和流,s-t割的容量是s-t割交叉流量的上界(即最大值),推理过程很简单。

2. 对于任意的s-t割,割的交叉流量的值等于s-t流的值,这个推理稍微麻烦一点儿,主要思想是把前一项的终点分为S和T,后一项的起点分为S和T,再把前一项加和合并。

三、对于任意的s-t割和流,s-t割的容量是流的值的上界,这是由性质一和性质二推理出来的。

时间: 2024-11-03 23:02:56

最大流最小割算法的相关文章

最大流最小割 算法理解

by   http://blog.csdn.net/chinacoy/article/details/45040897 理解算法. 首先从最简单的开始,先看一幅图:  有3个节点S,a,T,边[S,a]的容量是10,边[a,T]的容量是5,假设从S处要传送数据到T,问最大传送数据量是多少?应该是min(10,5)=5.如果超出5,[a,T]边容不下,因此传不过去,此时的最大流量就是5,[a,T]边就是该图的一条最小割.该图可以想象成从S到T通水,需要修建水管,a是中间站点,S到a修建的水管可以容

matlab实现基于DFS的Ford_Fulkerson最大流最小割算法

function [F, maxf, V, S] = Ford_Fulkerson(C, src, sink) n = size(C, 1); F = zeros(n); maxf = 0; V = []; S = []; while true % in: ResNet. ResNet = C - F + F'; % residual network. % out: pre, Df pre = ones(1, n) * NaN; Df = ones(1, n) * inf; % DFS to f

hihocoder 网络流二&#183;最大流最小割定理

网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? 小Ho:我记得!网络流就是给定了一张图G=(V,E),以及源点s和汇点t.每一条边e(u,v)具有容量c(u,v).网络流的最大流问题求解的就是从s到t最多能有多少流量. 小Hi:那这个问题解决办法呢? 小Ho:解决网络流的基本思路就是寻找增广路,不断更新残留网络.直到找不到新的增广路,此时得到的

最大流最小割C++实现

最大流量问题:寻找从源点到汇点的最大流量. 使用最短增益路径法(或先标记先扫描法).这里标记意味着用两个记号来标记一个新的(为标记)的顶点:第一个标记指出从源点到被标记顶点还能增加多少流量:第二用来分别个标记指出另一个顶点的名字,就是从该顶点访问到被标记顶点的(对于源点来说这个标记可以不必指定).方便起见,也可以为第二个标记加上“+”或“-”符号,用来分别指出该顶点是通过前向边还是后向边访问到的.因此,源点可被标记为∞,-.对于其他顶点,按照以下方法计算它的标记: (1)如果为标记顶点j是由j到

最大流最小割一题

a 看完题目,根本没想法,暴力的复杂度是指数级别的,枚举所有的集合,当时有点紧张,暴力的都没写,其实没思路的 时候最好写暴力的算法,骗点分就可以了.后来,看了牛客网上大神的思路,然后学习了下最大流最小割的方法,这题的 做法就是枚举源点和汇点,跑最大流算法,然后用流量更新答案,同时保存最小割,最后输出,就可以了. 简单写了下,也是无法实际运行去判断正误. 对最大流最小割的思路理解的不是很透彻,不知道怎么求最小割,没有做这方面的练习. 1 #include <iostream> 2 #includ

hihoCoder1378 (最大流最小割)

#1378 : 网络流二·最大流最小割定理 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:在上一周的Hiho一下中我们初步讲解了网络流的概念以及常规解法,小Ho你还记得内容么? 小Ho:我记得!网络流就是给定了一张图G=(V,E),以及源点s和汇点t.每一条边e(u,v)具有容量c(u,v).网络流的最大流问题求解的就是从s到t最多能有多少流量. 小Hi:那这个问题解决办法呢? 小Ho:解决网络流的基本思路就是寻找增广路,不断更新残留网络.直到找不到新的增

网络的最大流最小割定理

什么是流(flow): 在一个有向图中,只有出去的边没有进来的边的节点叫做源(source),只有进来的边没有出去的边的节点叫做汇(sink),其它的节点进来的边和出去的边应该是平衡的. 边上可以加权值,假设对于一个交通图来说,可以认为边上的权重为一条道路上的最大流量.那么对于图中任意两个节点来说,它们之间可以存在很多路径,每条路径上可以负载的最大流量应该是这条路径上权重最小的那条边所能承载的流量(联想一下“瓶颈”这个词,或者木桶理论),那么所有的路径上所负载流量之和也就是这两个节点之间多能通过

【codevs1907】方格取数3(最大流最小割定理)

网址:http://codevs.cn/problem/1907/ 题意:在一个矩阵里选不相邻的若干个数,使这些数的和最大. 我们可以把它看成一个最小割,答案就是矩阵中的所有数-最小割.先把矩阵按国际象棋棋盘黑白染色(即把相邻的点分别染成白色和黑色),然后黑点连源点,白点连汇点.割掉一个点到源/汇的边就是不选择这个点,最后的目的就是使源到汇不连通(不引发题目不能选择位置相邻的数的矛盾). 然而最小割怎么求呢? 于是我们就要引入一个定理:最大流最小割定理.它的意思就是说,在一个图中,a点到b点的最

最大流最小割定理

一.割的定义 例子: 2.割边的概念 例子: 3.割的容量 二.网络流与割的关系 1.结论 2.定理1: 3.推论: 4.定理2 5.定理3: 6.结论: 7.一些1求解: 三.应用实例 最大净收益: 三个实验,三个实验器材:进行实验2与实验3的净收益: 至此,最大流与最小割的理论介绍已经结束,感谢有这样一份ppt,基本上能明白其中的原理:这个理论在图割算法中有应用,接下来会继续探究一下.