环的费用越负,每绕一圈越能省钱;但一个长环总共省六元,与一个两边环省四元,不代表同样的改进强度。最小平均费用环比较的是每条弧平均付出多少。它既是独立的有向图优化问题,也给费用流提供一种有多项式轮数保证的改进方向。
形式陈述
输入、输出和环的身份
输入是有限有向多重图理路有向图Directed graph · Digraph以顶点有序对为弧、能够保留连接方向的有限简单图结构。,每条弧有独立 ID、起终点和精确有理费用(属于实数费用理路实数系Real number system · Ordered complete field满足序域公理与上确界完备性的数系。的可执行子类) 。允许平行弧、反平行弧和自环。对非空简单有向环 ,定义
自环的长度是一,两个不同身份的反向弧可构成长二环。若全图无有向环,返回“无环”,不把答案填成零。存在环时,输出 、一条实际达到它的环,以及顶点势 ,使每条原弧满足
沿任意环相加时势抵消,右式证明它的均值至少为 ;输出环的均值恰好相等,又证明下界可达。这份证书只需逐弧加法和比较,不必重跑求解器。实数精确算术模型下定理相同,附件以有理数给出可执行接口。
恰好走 k 条弧
先剔除没有任何入弧或出弧的孤立点,并保留内部下标与原顶点的对应。设剩下 点。定义 为“可从任意顶点出发,恰好走 条弧到达 ”的最小费用;不存在这种游走时为 。于是
这里是动态规划理路动态规划Dynamic programming在有限或良基的状态依赖上复用已计算结果的算法设计范式。的分层状态:第 行只读第 行,没有“保留上一行值”的分支。加入那个分支求出的将是“至多 条弧”,不能直接代入下面的公式。
Karp 的刻画在这个任意起点版本中写成
若所有 均无穷,图无环:长为 的游走必重复顶点,而有环又能绕出任意长的游走。原文先在强连通分量中固定单源;任意起点初始化使各个分量一次参与,下面给出该版本的证明。[1,Theorem 1]
min–max 公式为什么成立
先设 。图中没有负环,任意起点到 的最短费用 能由简单路达到,因此
对每个有限 ,至少有一个 达到 ,相应差商非负;所以公式右边不小于零。
再取一个零费用环。从任意起点到该环上一点 ,选择达到 的简单路。接着反复绕零环,费用在每次回到 时不变。这条长游走的每个前缀都必须是到其终点的最短游走:若某前缀可变便宜,接回余下部分便会使到 的费用小于 。取长游走恰好第 条弧的终点 ,得到 。于是对所有有限 ,差商都非正,而至少一个为零,内层最大值恰为零。
一般费用下,把每条弧费用减去 。每个环均值减少 , 减少 ,每个差商同样减少 。移权后的最小均值为零,刚才的论证便给出原公式。
从均值恢复真正的环
数值表求出 后,令 。所有环的 费用非负,因此可从隐含的全点零费用虚拟源运行Bellman–Ford理路Bellman–Ford 算法Bellman–Ford algorithm通过反复松弛边求含负权边图的单源最短路并检测可达负环。,得到全图最短势 。其三角不等式给出
在移权费用为零的最优环上,上述非负项的总和是零,因而每条弧都取等号。只保留等号成立的紧弧,再用深度优先搜索理路深度优先搜索Depth-first search · DFS沿未访问边尽可能深入后回溯的图遍历算法。找一条有向环,必能成功;该环的原费用就是 。DFS 使用灰色栈上的回边并记录实际弧 ID,可以原样处理自环和平行弧。
这样恢复时不需要断言“某个 DP 最优游走的任意重复片段就是答案”。DP 的终点和最大差商只决定数值,实际环另用可核验的紧弧条件筛出。
直觉
衡量同一终点多走 步后费用怎样变化,但两项可以来自不同游走,并不是预先知道的同一条环。对固定终点先取最大值,是排除过分乐观的短前缀比较;再寻找最有利的终点。公式的保证来自移权后“零环可以无限重复而最短费用不变”,而非把每个差商都当作真实环均值。
势则把一个全局下界摊到每条弧。均值为 的环上,每条弧都恰好用完这份下界,紧弧图把它们显露出来。不同最优环可以共享顶点或弧,算法只承诺返回其中一个。
数值下界与实际环证书
例子与边界
有自环和孤立点的一张表
取弧 、、、、,另有孤立点四。压缩后 ,表为:
|
|
|
|
|
| 0 |
0 |
0 |
0 |
0 |
| 1 |
0 |
2 |
−5 |
−1/2 |
| 2 |
−5 |
2 |
−3 |
−1 |
| 3 |
−3 |
−3 |
−3 |
−3/2 |
| 4 |
−3 |
−1 |
−8 |
−2 |
四个终点的内层最大差商依次为 ,所以 。以终点二为例,四个差商依次是 ,最大值为 。
势 给前三条弧约化费用 ,给 约化费用零,自环仍为 。三边环费用 、均值 ,优于自环的 ;所有原弧约化费用都不小于 ,证书闭合。
总费用、负边和负环不能混用
一个十边环总费用 ,另一个两边环总费用 ,总费用最小的是前者,均值最小的是后者。若只挑费用最负的单条弧,还可能挑到一条根本不在任何环上的弧。无环图允许有很负的边,接口仍返回“无环”;若所有环费用为正,则最小均值是正数,并不是零。
费用自环是必须参加比较的候选,不能沿用某些最大流预处理而删除。平行弧的终点相同,费用和 ID 仍须分别扫描;恢复证书若只记前驱顶点,会丢掉实际达到均值的那条弧。
时间、空间和精确算术
令原图有 点、 弧。孤立点压缩花 ,有弧时 。DP 初始化及扫描花 ,求全部差商花 ,移权最短势和紧弧 DFS 不超过同阶。因此精确单位成本算术下总时间为 ,空间为 ; 时只需线性读入和空结果。附件保留整张 DP 表以计算所有差商,不把滚动两行的空间冒认为本实现空间。
整数费用绝对值至多 时, 的有限值绝对值至多 ;差商分母至多 。用交叉相乘可以精确比较差商,不能以浮点误差把正均值当负均值。一般有理输入可先统一分母,清分母所得整数的位长必须计入;上述是算术次数界,若中间数为 位,还需乘相应精确运算成本。
推论与应用
当且仅当图有负环;但数值大小给出了比“有或没有”更细的改进强度。费用流在残量网络反复求该环,并沿瓶颈更新,会形成最小平均环消去算法理路最小平均环消去Minimum mean cycle canceling · Minimum mean cycle cancelling · Goldberg–Tarjan cycle-canceling algorithm从任意可行流反复消去最小平均费用残量环,以紧误差收缩和固定弧证明强多项式轮数。。其轮数证明依赖本页的全弧势下界和环上全部取等号,不能用任意负环代替。
在周期调度和长期重复运行的有限状态系统中,环均值描述每个转换的平均开销。若每条弧另有不相同的持续时间,要最小化“总费用除以总时间”,分母就不再是弧数,本页的边数 DP 公式不能直接照用。
手算迁移:把例子的自环费用改为 ,重新给出最小均值、实际环和合法势;再删除三边环中的 以及自环,解释为什么含负边的剩余图返回“无环”。完整执行入口见费用流终结任务。
参考资料