最小割的求解算法

最小割求解算法

最大流解法

最大流解法是求解最小割问题的一种常规解法,算法的核心点有两点,一是为什么网络流算法可以用于求解最小割?二是由于网络流算法需要选定一个源点跟一个汇点,所以当在一个任意图中时是否需要专门寻找一个源点跟一个汇点算法才能成立?
①为什么可以求解
由于最大流算法的本质就是求从源点到汇点的最大网络流量,其最大流恰恰对应着最小割,故可以用最大流方法求解。
对于最大流的求解有多种方法,相对应的最小割求法也应当对应多种,最常见的应该是求增广路径,得到原图的剩余网络图,进而继续求解剩余网络图的增广路径,不断循环直到最终连通图被分成两部分即可得到最小割。
详细算法可见link.
或者link.
②是否需要特定的源点跟汇点算法才可行。
一般来讲需要专门的源点跟汇点才可以进行网络流算法求最小割,举一个极端的例子,对于最小割只包含一条边的图,如果做求最大流算法的两个点都在最小割所包含边的一边,则算法的运算结果显然不正确,故这种求法显然具有较大的限制性。

Stoer-Wagner Algorithm算法

首先不介绍算法,我们考虑一下这个算法的推导:

最小割的性质

首先考虑最小割是什么,以及其具有的性质。

首先我们应该注意到我们只在连通图中考虑最小割的问题,如果不是连通图显然最小割为0;

首先考虑在无向图中:

最小割具有这样的性质,即将图切割成两半时切割的权值最小,假如把图中每一个边都想象成一根绳子,把切断每一根绳子的所需要的力气想象成其权值,那么最小割就把一个这种绳子连接的节点分成两半所需要的最小力气值。

与二分图的区别

那么最小割是找到把一个连通图分成两部分所需要的最小权值边的集合,那么它与二分图有什么关系?他与二分图本质上是不一样的,因为二分图只允许分来的两边是可以有边相连的,但是最小割两边的子图却没有这个限制。

怎么求解最小割

一个无向连通图中的割有很多,这些不同的割与最小割之间最大的区别就是,最小割上边的权值和最小,那么如何在图中找到这个最小割呢?

现在途径应该有两种,一种是不对图做处理,而是对搜索路径加以约束,使其搜索的过程中一定会遇到最小割,我们通过记录,比较即可得出最小割。第二种是对已有的图进行处理,删除一些不影响最终结果的特征。下面分别对这两种思路进行可行性分析。

①首先考虑约束搜索路径,使得搜索过程中一定会经过最小割

②其次考虑对图做一些处理。

a.首先考虑到对单个顶点做处理,首先考虑删除某个顶点是否会影响最小割的判断。

很明显的一个事实就是,即使我们删除某些点,由于我们并没有提出判断子图最小割的方法,故一直删下去也不能求出最小割,只能使图一直删除直到成为空图。

b.考虑删除图中的某一条边

显然删除一条边,所有包含着条边的割都会变小,那么可能会出现新的割比最小割更小的情况,故不可行。

c.由于简单的删除某些边会影响所有经过这条边的割故,考虑收缩边。

收缩边以后,假设收缩的边为e,与他相邻的两个顶点分别是a,b,那么以前包含e的割,收缩后新的割除了包含除e以外的边以外还将包括与a,或者相邻的部分边,显然新生成的割也是原图中的割,那么我们只要保证收缩的边不是最小割中的边即可,那么收缩到最后一定就是最小割的权值。

现在考虑如何收缩可以满足上面所讨论的要求,

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