最大流和最小割问题

以下是根据个人的理解用大白话解释的定义:

设有一个有向带边权图G,并确定图中一个结点作为源点(可以理解成起点),再确定另一个点作为汇点(可以理解成终点),在这个图中找到一个边集A,使得在这个图G中删掉A后有且仅有两个子图,且两个子图分别包含源点和汇点。其中这个点集A成为割集。当这个割集里的所有边的权值之和达到最小的时候,称其为最小割。从源点开始按照后一边的流量不得大于前一边(后一边和前一边之间由一个结点相连)的原则,从源点开始给出一个流量值,一直往后推算,知道汇点,这个流量值最大的时候,称之为最大流。

以下是个人理解的一些阐述:

首先,由于流量往后走的时候,不会比之前多,所以最大流的瓶颈明显在于中间某最小割里所有边的权值之和。可以这样理解,有一个装置类似于沙漏,但是沙漏的瓶颈管道不只有一个,而是有很多个,傻子要从沙漏装置的上面漏到下面,必须经过这些众多瓶颈管道中的一个,而这些瓶颈管道们刚好把整个沙漏分成了两部分(其实这些瓶颈们的横截面积之和就是最小割啦)。不管这两部分的容量多大,只有这些瓶颈管道每单位时间的通过量不变(其实也就是瓶颈们的横截面积之和不变),单位时间的流量就不变,而这个最大流就是沙子很多,多到足以占用掉所有瓶颈的横截面积之和,这个时候,单位时间的通过量。这样就很容易理解最小割和最大流为什么总是相等了。(这段陈述里的瓶颈其实就是整个沙漏横街面积最小的地方,为什么说有很多个瓶颈呢, 因为一个瓶颈通道对应一个边割集中的一条边)

以下是应用:

1、职位分配                                                                          
公司提供职位看,学生申请职位,每个职位都可以聘用到员工吗,每个学生都可以找到工作吗?

二部图匹配
输入:无向二部图G
边的子集合称为一个匹配当且仅当任意两条边没有公共顶点
最大匹配:找到边数最多的匹配

转化为网络流问题
创建一个有向图G’
所有边的方向从左到右,
   容量设置为无穷大
添加源点 s , s 到 L 中每
   个顶点容量为 1
添加汇点 t , R 中每个顶
   点到 t 的容量为 1

断言:大小为 k 的流对
应着大小为 k 的匹配
首先,该问题的最大流一定是一个整数流
中间的流值为 1 的边的集合是一个
   大小为k的匹配

2、赛制淘汰

源点无意义,第二列结点是对战情况(不包括正在被计算的结点),第三列是队伍结点(不包括正在被计算的结点),第四列是正在计算有无获胜可能的队伍的结点。

3、图割方法(两个图像的合并)(这个源点和汇点的寻找比较有灵性,取点的权值最大的和最小的作为源点和汇点,或者手动算一个源点和一个汇点,又或者强行设两个点和已有的点都有边然后以这两个点为源点和汇点,这种方法太强行了,算法时空复杂度都不理想;然后点就是图像对应的点阵里的每一个点,点的权值就是点阵中点的参数,然后边的权值是相邻两个结点的权值的差的绝对值加一的和取倒数,或者平方加一取倒数,或者手动离散化。

应用的难点主要在怎么设置结点,怎么设置边权,怎么确定源点和汇点。

 

 

 

你可能感兴趣的:(算法)