关于Yuri Boykov and Vladimir Kolmogorov 于2004年提出的max flow / min cut的算法的详解

 

出处:http://blog.csdn.net/euler1983/article/details/5959622

算法优化algorithmgraphtree任务

这篇文章说的是Yuri Boykov and Vladimir Kolmogorov在2004年提出的一种基于增广路径的求解最大流最小割的算法,号称大部分情况下会很快。而且在算完之后,会自动完成最小割集的构造。

作者写了一个C的实现:http://vision.csd.uwo.ca/code/maxflow-v3.01.zip

文章参考:《GRAPH BASED ALGORITHMS FOR SCENE RECONSTRUCTION FROM TWO OR MORE VIEWS》这是作者的博士论文,在最后的一章节里详细提到了这种算法的思路。

这个算法的思路并不难懂,但是看起来有点难度。文中充满了q is children of p之类的表述,看着看着就混淆了。而且代码里的变量命名也很随意,花了3,4天的时间,终于搞定。

算法的直观理解

第一个改进:

首先算法采用了两条增广路径,分别从source和sink出发,边搜索边标号,这样当所有的点都被搜索并标号后,最小割集也就形成了。

所有在最前沿的点称为active node,这些点的任务是去发展新的node。而被active node包围起来的那些点,则称之为passive node。

而没有被发掘出来的点则称之为free node。

第二个改进:

基于增广路径的算法都是遵循:找出一个可行流----》更新残留网络----》然后再找下一个可行流。

此算法需要不断地去找可行流,而每次找都得从源点重新开始进行一个广度遍历或者深度遍历直到找到汇点。这篇文章的算法正是基于此来进行改进。

找到一个可行流后,要进行augmention,然后必然会出现饱和的边,比如这样的一条路中:p1----->p2---->p3----->p4,p2->p3这条边饱和了。如果我们不管他,还是继续遍历去寻找汇点,那么当你再次找到一条路后,那么这条路中就有可能包含一些已经饱和路径,那就没法进行增广了。所以,我们必须要去调整那些饱和的边,使得在已经构建的路径中不存在饱和的边。在本例中,p3称之为orphan(孤点),那么接下来就得做一个adopt orphan的操作,呵呵,名字起得很有意思(养育孤儿),意思就是说给每个p3这样的孤儿点找一个新的parent,养育完就没有orphan存在了。方法如下:

检查p3的neighbors,看看有没有一个neighbor, let's say node q,s.t.

(1). q->p3满足容量大于0

(2). q是已经被搜过的点,也就是说q已经在我们的span tree了,in another word,当我们沿着汇点逆流而上搜索到q时,可以顺利地找到q的father,从而最终可以顺藤摸瓜摸到source上。

(3). 通过q最终能到达source或者sink这样的终点。这是因为有可能顺着q走着走着,最终走到一个free node去了。或者走到一个orphan去了,而这个orphan最终也无人抚养而变成free node。

那么如果找不到这样的q,那么p3就不得不变成free node。然后再做以下两个调整:

(4). 对于p3的邻居pk,如果pk到p3的边(pk-->p3)的容量大于0, 则将pk设为active。

(5). 对于p3的邻居ph,如果p3=parent(ph),那么把ph也设置为orphan,加入到orphan集合里。

这是因为当有一条路从sink走到ph的时候,会发现无路可走了,因为parent(ph)是一个free node!

所以我们必须对ph也做相同的处理,要么找一个新的parent,要么您老人家变成free node,先一边凉快会!

orphan集合中在增广时建立,每次更新一个边后,如果发现改变后的边的残留流量=0,则把边指向的那个点加入orphan set。

在adoption阶段,反复从orphan set中取点,每取出一个孤儿,首先看看能不能找到一个新的parent,如果找不到则令其变成free node,并把他的child变成orphan,加入到orphan集合中。循环往复,直到orphan set = 空集。

细节:

对上述的(3)可以进行优化。

优化一:不必每次要追溯到source/sink才罢休。

因为对于orphan的每一个邻居进行判断其是否originate from TERMINATE node时,都要逆流追溯至source / sink点。那么其中的一些点可能要被追溯多次,那么这是一个重复的操作。如果一个点,已经被证明了,他是可以到达source / sink的,那么下次当有点经过他的时候,他就可以直接告诉该点,OK,哥们歇歇吧,你是valid的,通过我可以追溯到source/sink。这就是在algorithm tunning里提到的mark的意思。

优化二:选择离source/sink最近的那个neighbor,作为orphan的新parent.

要实现这个优化,必须给每个节点附加一个属性:该节点到source/sink的最短距离。

并且在growth阶段,当一个active node q1 遇到另一个active node q2时,要比较一下是否把parent(q2)=q1后,q2到source/sink的距离更短,如果是,那么就调整下q2,使得它变成q1的child。正所谓:

人往高处走,水往低处流,节点都往终点凑!

时间: 2024-12-25 04:10:29

关于Yuri Boykov and Vladimir Kolmogorov 于2004年提出的max flow / min cut的算法的详解的相关文章

Fireworks MX 2004新功能色彩替换详解

详解 在Macromedia官方的宣传中,有十个推荐的Fireworks MX 2004的新功能,其中有一个是Replace Color Tool.实话说,在拿到新版的Fireworks时,这个功能没有引起我的注意,粗略的看它和4.0版本的擦除工具有些相似.但细细使用之后,它的功能有些令我吃惊,他可以做的不仅仅是位图的色彩替换,更进一步,它还可以改变图片的主色调,替换背景色,还有一个更重要的是利用它可以进行扣图的操作.下面就来看看他的这几大主要功能. 首先我们打开一张美女图,我们将要利用这个美女

详解Fireworks MX 2004丰富的图像导出功能

详解  在Fireworks中创建并优化图形后,用户可将该图形输出为常用的Web格式及供其他程序(如Freehand)使用的向量图形格式.Fireworks MX 2004由于它的面向网络的特性,导出的形式可以不仅仅是图像,还可以是包含各种链接和Java Script信息的完整的网页.由于图像的导出和优化一样将产生一个导出副本,因此是不会修改原图的,所以,用户可以尝试在Fireworks中用一幅原图导出不同种类的许多图像. 一.导出预览 由于不同的图像格式使用的是不同的压缩方法,图像的质量和表象

Dreamweaver MX 2004 入门教程之界面详解

dreamweaver|教程|入门教程|详解 本站原创内容,转载请注明出处网页教学网. Dreamweaver MX 2004 具有全新的风格和启动画面,请去baidu或google搜索这个软件下载并安装,在此不做详细介绍.Dreamweaver MX 2004提供了面向设计人员的布局和面向手工编码人员需求的布局.首次启动Dreamweaver MX 2004时,会出现一个工作区设置对话框(如下图): 您可以从中选择一种适合您的工作区布局.如果您不熟悉编写代码,请您选择"设计者".如果

Dreamweaver MX 2004打造留言本详解

dreamweaver|详解 一.IIS(Internet 信息服务)安装配置 这里以Windows Server 2003(以下简称Win2003)为例.因为Win2003是服务器级的操作系统,所以自带有IIS6.0,其它版本的系统可以在"添加或删除程序>>添加/删除Windows组件"对话框中把"Internet 信息服务(IIS)"前的勾选中,点"下一步"进行安装就行了(注:在这之前应把系统安装盘放到光驱). IIS装好之后再作

FW MX 2004新功能色彩替换详解[转帖]

在Macromedia官方的宣传中,有十个推荐的Fireworks MX 2004的新功能,其中有一个是Replace Color Tool.实话说,在拿到新版的Fireworks时,这个功能没有引起我的注意,粗略的看它和4.0版本的擦除工具有些相似.但细细使用之后,它的功能有些令我吃惊,他可以做的不仅仅是位图的色彩替换,更进一步,它还可以改变图片的主色调,替换背景色,还有一个更重要的是利用它可以进行扣图的操作.下面就来看看他的这几大主要功能.  首先我们打开一张美女图,我们将要利用这个美女进行

图像分割之(四)OpenCV的GrabCut函数使用和源码解读

     图像分割之(四)OpenCV的GrabCut函数使用和源码解读                     分类:            图像处理            计算机视觉             2013-01-23 17:19     12031人阅读     评论(33)    收藏    举报     图像分割之(四)OpenCV的GrabCut函数使用和源码解读 zouxy09@qq.com http://blog.csdn.net/zouxy09         上一文

GraphCuts算法解析,Graphcuts算法求最大流,最小割实例

   图割论文大合集下载: http://download.csdn.net/detail/wangyaninglm/8292305   代码: /* graph.h */ /* Vladimir Kolmogorov (vnk@cs.cornell.edu), 2001. */ /* This software library is a modification of the maxflow algorithm described in An Experimental Comparison o

Flash MX 2004升级 AS改进是重

7月26日,Macromedia公司发布了Flash MX 2004的升级包,该升级包修正了原2004文档中的很多BUG,功能更完善,以下节选自Macromedia关于该升级版Flash MX 2004文档的最新改进的描述: 增加了400多个新的代码范例 将ActionScript语言参考示例的个数百分比从43%增长到98% 增加ActionScript文档大小到85% 增加了21个新的文档范例FLA源文件,进一步证明用FLASH开发通用应用软件的强大功能 修复了2000多个文档BUG 增加了2

手把手教你学Dreamweaver MX 2004(视频教程)

dreamweaver|教程|视频教程 2004年,FIF多媒体制作组推出了 photoshop 视频教程,这是网络中首次推出如此完整系统的的视频教程.作品一经推出,即备受欢迎,好评如潮.据FIF官方统计,photoshop 视频教程访问量总计高达2000万次.现在,FIF联合PConline软件资讯,再次隆重推出 Dreamweaver MX 2004 视频教程.本系列教程将结合实例,深入浅出的讲解,帮助大家轻轻松松的掌握 Dreamweaver MX 2004 的使用方法. 提示:本视频教程