Skip to content

算法Algorithm

最小平均费用环

Minimum mean cycle · Minimum cycle mean · Karp minimum mean cycle algorithm

用恰好边数的动态规划求最小环均值,再以移权势与紧弧环同时证明下界和可达到性。

环的费用越负,每绕一圈越能省钱;但一个长环总共省六元,与一个两边环省四元,不代表同样的改进强度。最小平均费用环比较的是每条弧平均付出多少。它既是独立的有向图优化问题,也给费用流提供一种有多项式轮数保证的改进方向。

形式陈述 ​

输入、输出和环的身份 ​

输入是有限有向多重图,每条弧有独立 ID、起终点和精确有理费用(属于实数费用的可执行子类) ca。允许平行弧、反平行弧和自环。对非空简单有向环 C,定义

μ(C)=∑a∈Cca|C|,μ∗=minCμ(C).

自环的长度是一,两个不同身份的反向弧可构成长二环。若全图无有向环,返回“无环”,不把答案填成零。存在环时,输出 μ∗、一条实际达到它的环,以及顶点势 p,使每条原弧满足

ca+p(u)−p(v)≥μ∗.

沿任意环相加时势抵消,右式证明它的均值至少为 μ∗;输出环的均值恰好相等,又证明下界可达。这份证书只需逐弧加法和比较,不必重跑求解器。实数精确算术模型下定理相同,附件以有理数给出可执行接口。

恰好走 k 条弧 ​

先剔除没有任何入弧或出弧的孤立点,并保留内部下标与原顶点的对应。设剩下 N 点。定义 Dk(v) 为“可从任意顶点出发,恰好走 k 条弧到达 v”的最小费用;不存在这种游走时为 +∞。于是

D0(v)=0,Dk(v)=mina:u→v{Dk−1(u)+ca},1≤k≤N.

这里是动态规划的分层状态:第 k 行只读第 k−1 行,没有“保留上一行值”的分支。加入那个分支求出的将是“至多 k 条弧”,不能直接代入下面的公式。

Karp 的刻画在这个任意起点版本中写成

μ∗=minv:DN(v)<+∞ max0≤k<NDk(v)<+∞DN(v)−Dk(v)N−k.

若所有 DN(v) 均无穷,图无环:长为 N 的游走必重复顶点,而有环又能绕出任意长的游走。原文先在强连通分量中固定单源;任意起点初始化使各个分量一次参与,下面给出该版本的证明。[1,Theorem 1]

min–max 公式为什么成立 ​

先设 μ∗=0。图中没有负环,任意起点到 v 的最短费用 d(v) 能由简单路达到,因此

d(v)=min0≤k<NDk(v)≤DN(v).

对每个有限 DN(v),至少有一个 k<N 达到 d(v),相应差商非负;所以公式右边不小于零。

再取一个零费用环。从任意起点到该环上一点 w,选择达到 d(w) 的简单路。接着反复绕零环,费用在每次回到 w 时不变。这条长游走的每个前缀都必须是到其终点的最短游走:若某前缀可变便宜,接回余下部分便会使到 w 的费用小于 d(w)。取长游走恰好第 N 条弧的终点 v,得到 DN(v)=d(v)。于是对所有有限 Dk(v),差商都非正,而至少一个为零,内层最大值恰为零。

一般费用下,把每条弧费用减去 μ∗。每个环均值减少 μ∗,Dk(v) 减少 kμ∗,每个差商同样减少 μ∗。移权后的最小均值为零,刚才的论证便给出原公式。

从均值恢复真正的环 ​

数值表求出 μ∗ 后,令 ca′=ca−μ∗。所有环的 c′ 费用非负,因此可从隐含的全点零费用虚拟源运行Bellman–Ford,得到全图最短势 p。其三角不等式给出

ca′+p(u)−p(v)≥0.

在移权费用为零的最优环上,上述非负项的总和是零,因而每条弧都取等号。只保留等号成立的紧弧,再用深度优先搜索找一条有向环,必能成功;该环的原费用就是 |C|μ∗。DFS 使用灰色栈上的回边并记录实际弧 ID,可以原样处理自环和平行弧。

这样恢复时不需要断言“某个 DP 最优游走的任意重复片段就是答案”。DP 的终点和最大差商只决定数值,实际环另用可核验的紧弧条件筛出。

直觉

DN(v)−Dk(v) 衡量同一终点多走 N−k 步后费用怎样变化,但两项可以来自不同游走,并不是预先知道的同一条环。对固定终点先取最大值,是排除过分乐观的短前缀比较;再寻找最有利的终点。公式的保证来自移权后“零环可以无限重复而最短费用不变”,而非把每个差商都当作真实环均值。

势则把一个全局下界摊到每条弧。均值为 μ∗ 的环上,每条弧都恰好用完这份下界,紧弧图把它们显露出来。不同最优环可以共享顶点或弧,算法只承诺返回其中一个。

数值下界与实际环证书
例子与边界

有自环和孤立点的一张表 ​

取弧 0→1:2、1→2:−5、2→0:0、2→3:4、3→3:−1/2,另有孤立点四。压缩后 N=4,表为:

k Dk(0) Dk(1) Dk(2) Dk(3)
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

四个终点的内层最大差商依次为 1,2,−1,−1/2,所以 μ∗=−1。以终点二为例,四个差商依次是 −2,−1,−5/2,−5,最大值为 −1。

势 p=(−3,0,−4,0,0) 给前三条弧约化费用 −1,−1,−1,给 2→3 约化费用零,自环仍为 −1/2。三边环费用 −3、均值 −1,优于自环的 −1/2;所有原弧约化费用都不小于 −1,证书闭合。

总费用、负边和负环不能混用 ​

一个十边环总费用 −6,另一个两边环总费用 −4,总费用最小的是前者,均值最小的是后者。若只挑费用最负的单条弧,还可能挑到一条根本不在任何环上的弧。无环图允许有很负的边,接口仍返回“无环”;若所有环费用为正,则最小均值是正数,并不是零。

费用自环是必须参加比较的候选,不能沿用某些最大流预处理而删除。平行弧的终点相同,费用和 ID 仍须分别扫描;恢复证书若只记前驱顶点,会丢掉实际达到均值的那条弧。

时间、空间和精确算术 ​

令原图有 n 点、m 弧。孤立点压缩花 O(n+m),有弧时 N≤2m。DP 初始化及扫描花 O(N(N+m)),求全部差商花 O(N2),移权最短势和紧弧 DFS 不超过同阶。因此精确单位成本算术下总时间为 O(n+m+nm),空间为 O(n+m+N2);m=0 时只需线性读入和空结果。附件保留整张 DP 表以计算所有差商,不把滚动两行的空间冒认为本实现空间。

整数费用绝对值至多 C 时,Dk 的有限值绝对值至多 NC;差商分母至多 N。用交叉相乘可以精确比较差商,不能以浮点误差把正均值当负均值。一般有理输入可先统一分母,清分母所得整数的位长必须计入;上述是算术次数界,若中间数为 B 位,还需乘相应精确运算成本。

推论与应用

μ∗<0 当且仅当图有负环;但数值大小给出了比“有或没有”更细的改进强度。费用流在残量网络反复求该环,并沿瓶颈更新,会形成最小平均环消去算法。其轮数证明依赖本页的全弧势下界和环上全部取等号,不能用任意负环代替。

在周期调度和长期重复运行的有限状态系统中,环均值描述每个转换的平均开销。若每条弧另有不相同的持续时间,要最小化“总费用除以总时间”,分母就不再是弧数,本页的边数 DP 公式不能直接照用。

手算迁移:把例子的自环费用改为 −2,重新给出最小均值、实际环和合法势;再删除三边环中的 2→0 以及自环,解释为什么含负边的剩余图返回“无环”。完整执行入口见费用流终结任务。

参考资料
  • Richard M. Karp,A Characterization of the Minimum Cycle Mean in a Digraph,UCB/ERL M77/47,1977,正文 pp.1–3,Theorem 1、Lemma 1 和动态规划;正式发表为 Discrete Mathematics 23,1978,pp.309–311。本页给出任意起点版本证明,并以紧弧图独立恢复环。
  • Andrew V. Goldberg、Eva Tardos、Robert E. Tarjan,Network Flow Algorithms,1990,§4.2,印刷 pp.137–139:移权最短势、最小环均值与紧误差的联系。
关系图谱17 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系