Stoer-Wagner 算法
定义
由于取消了 源汇点 的定义,我们需要对 割 的概念进行重定义。
(其实是网络流部分有关割的定义与维基百科不符,只是由于一般接触到的割都是「有源汇的最小割问题」,因此这个概念也就约定俗成了。)
割
去掉其中所有边能使一张网络流图不再连通(即分成两个子图)的边集称为图的割。
即:在无向图
有源汇点的最小割问题
同 最小割 中的定义。
无源汇点的最小割问题
包含的弧的权和最小的割。也称为全局最小割。
显然,直接跑网络流的复杂度是行不通的。
Stoer-Wagner 算法
引入
Stoer-Wagner 算法在 1995 年由Mechthild Stoer与Frank Wagner提出,是一种通过 递归 的方式来解决 无向正权图 上的全局最小割问题的算法。
性质
算法复杂度
它的实现基于以下基本事实:设图
过程
- 在图
中任意指定两点 ,并且以这两点作为源汇点求出图 的 最小割(定义为cut of phase),更新当前答案。 - 「合并」点
,如果图 中 大于 ,则回到第一步。 - 输出所有cut of phase的最小值。
合并两点
解释:如果
步骤 1 考虑了
S-T 最小割的求法
(显然不是网络流。)
假设进行若干次合并以后,当前图
我们构造一个集合
我们每次将
其中权值函数的定义:
(若
容易知道所有点加入
则对任意点
证明
定义一个点
如图,蓝色区域和黄色区域为两个不同的连通块,方括号中的数字为加入
定义
定义诱导割
对于任何被激活的点
证明:使用数学归纳法。
对于第一个被激活的点
对于之后两个被激活的点
又,已知:
由于
由归纳法得证。
由于
复杂度分析与优化
contract操作的复杂度为
一共进行
根据 最短路 的经验,算法瓶颈在于找到权值最大的点。
在一次contract中需要找
斐波那契堆 可以胜任
(实际测试中开 O2 还要卡评测波动才能过。)
贡献者:@Imple@Menci@WenzelTian@yzy-1@sldpzshdwz@kenlig@陈鼫RWHTYFZ@忘怀@DanJoshua
本页面最近更新:2/3/2023, 12:00:00 AM,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用