前两天一时兴起,就学了一下全局最小割,却无奈的发现网上的中文比较好的资料奇缺无比,基本算法书上也没能找到这个算法。这还不是最惨的,网上还多资料模棱两可,甚至有一些错误的算法。于是打算稍微了解一下这个算法。经过看了各种资料,基本这个算法可以领略一二,但是最关键的一个部分至今不懂,以后有机会再补上。
为了说明这个算法,先引入两个引理。
引理1.任意在无向图G中选出s和t. 最小割的值要么等于以s和t为源汇点的最小割,要么等于将s和t缩点之后的全局最小割。
简单说明,如果存在一个最小割,s和t分别在两个点集中,那么s-t最小割就等于全局最小割,如果不是,那么s和t就在同一侧点集,缩点之后肯定不影响最小割的求解。将s和t缩点的操作就是将新建一点 ,该点到任意点的边权等于s到该点的边权与t到该点的边权之和。
既然有了这个结论,那大体的算法框架就是,找任意s和t的最小割,然后缩点,总点数减一,重复n-1次之后,那么就剩下一个点,算法结束。
现在的难点就是如何在最短的时间内找到任意s和t之间的最小割大小。
引理2.初始集合A为空集,任意选择无向图中一点进入集合,开数组记录到达每一个点的边权和,边权和更新加上每次进入集合的点到达其他不在集合内的点的边权,然后每次从不在集合内的所有点中选择一点累计边权和最大的点进入集合,直至所有点进入A中,最后一个进入A的点为t,t之前一个进入集合的点为s,则t进入集合时的边权和就是s和t之间的最小割。(我也不懂)
至此整个算法流程就出炉了。
具体的证明在97年两人发表的论文上有(没看懂)。
最后奉上两篇极品论文。
stoerwagner-mincut.[Stoer-Wagner_Prim].pdf 作者:MECHTHILD STOER AND FRANK WAGNER
Mehlhorn_a_1999_a.pdf 作者 : SRINIVASA.R.ARIKATI AND KURT MEHLHORN