正权有向图上次短路径问题更快的算法
zhouhuanyi
·
·
算法·理论
这篇论文只能做到 \widetilde O(n^4m^3) 的时间复杂度?玩的太差了。这题可以做到 \widetilde O(n^2m^3) 的时间复杂度。
在 m=\Theta(n) 的稀疏图上,从七次方降到五次方。核心不是加速某一次最短路,而是:
把“消去非最短路核心顶点”和“细分边”都移到正确性证明中;实际算法始终在原图上做最短路,并且只枚举原始边,不枚举细分位置。
下述是我基于 Chen–Wein–Zhang 核心引理得到的改写,不是原文已经声明的复杂度;我给出完整的归约与正确性论证,但仍需要独立复核。
我核对了其 2026 年 7 月 13 日的 v2:主定理仍是严格正实数边权下的 O(n^4m^3\log n)。作者也明确提到,避免边细分可能得到 O(n^4m^2\log n)。下面不止省掉细分操作,还要避免在消元产生的稠密图上运行最短路。(arXiv)
一、先提取最短路核心,并处理一类容易的答案
设
d(v)=\operatorname{dist}_G(s,v),\qquad
\bar d(v)=\operatorname{dist}_G(v,t),\qquad
D=d(t).
若 D=\infty,直接报告无解。以下考虑 s\ne t,且边权严格为正。
定义最短路核心
S=\{v:d(v)+\bar d(v)=D\},
以及核心上的紧边图
H=(S,F),\qquad
F=\{(u,v)\in E:\ u,v\in S,\ d(u)+w(u,v)=d(v)\}.
记
q=|S|,\qquad p=|F|.
因为边权严格为正,H 中每条边都严格增加 d,所以 H 是 DAG。每个核心顶点都有完全位于 H 中的最短前缀与最短后缀。
1. 非下降的非紧连接可以直接处理
考虑一段 x\to y 路径 R,其中 x,y\in S、x\ne y,且所有内部顶点都在 V\setminus S。也允许 R 就是一条原图边。
假设
d(x)\le d(y),\qquad w(R)>d(y)-d(x).
取任意核心最短路 P_{sx} 与 P_{yt},则
P_{sx}\circ R\circ P_{yt}
是一条简单路:前缀上的顶点高度至多 d(x),后缀上的顶点高度至少 d(y),两者不交;中段内部不在核心,也不会与它们相交。高度相等时,由 x\ne y 及核心路径上的严格单调性,结论仍然成立。
其长度为
d(x)+w(R)+D-d(y)>D. \tag{1}
如果某条最优严格次短路包含这样的中段,我们就能直接找到不比它更长的合法答案。因为该最优路的前缀、后缀分别不会比 d(x)、D-d(y) 更短。
2. 怎样找这些连接,不额外增加指数?
分开处理两种情况:
- 两端都在核心的原始非紧边,直接扫描。
- 至少经过一个非核心顶点的外部绕行,对每个 x\in S 做一次 Dijkstra。
第二种 Dijkstra 中,其他核心顶点只允许到达、不允许继续扩展;并且禁止从 x 直接进入另一核心顶点,因为直接边已单独处理。
这里有一个细节:不能把紧边和外部绕行一起只保留最短者,否则一条紧边可能掩盖我们需要检查的更长绕行。
外部绕行一定是非紧的:否则把它接上两端最短路,就得到经过非核心顶点的最短 s-t 路,与核心的定义矛盾。
这一部分总计
O\bigl(q(m+n\log n)\bigr).
算法最终会对容易部分和后面的困难部分统一取最小值。下面只是在证明上把尚需处理的情况归结为:
最优解中,相邻两次访问核心之间的每一段非紧连接,都从较大的 d 下降到较小的 d。
二、困难部分:只枚举两个端点和两条原始紧边
枚举
A,B\in S,\qquad d(A)>d(B),
以及两条原始紧边
e=(x_0,x_1),\qquad f=(y_0,y_1)\in F.
只保留高度开区间重叠的边对:
\boxed{
\max\{d(x_0),d(y_0)\}
<
\min\{d(x_1),d(y_1)\}.
} \tag{2}
可以把这理解为:两条边都跨过了某个共同的水平切面。但我们不枚举这个切面的位置。
1. 寻找两条受指定边约束的不交外侧路径
我们需要在 H 中找
P_1:s\to A,\qquad P_2:B\to t,
使得 P_1 经过 e,P_2 经过 f,且二者顶点不交。
这只需两次 DAG 双路径查询:
\begin{aligned}
&\text{下半部分:} &&s\to x_0,\quad B\to y_0;\\
&\text{上半部分:} &&x_1\to A,\quad y_1\to t.
\end{aligned} \tag{3}
每一行内部要求两条路径顶点不交。
为什么两行可以独立求解?由式 (2),存在一个高度 c,满足
d(x_0),d(y_0)<c<d(x_1),d(y_1).
下半部分的所有顶点都在 c 以下,上半部分都在 c 以上。因此分别找到不交路径后,再接上 e,f,就得到完整的不交路径对。
DAG 上指定两对端点的顶点不交路径可在线性时间求出;这是 Tholey 的结果,也是 CWZ 使用的子程序。于是这一过程耗时 O(q+p)。(科学直通车)
2. 删除外侧路径顶点,在原图上找中段
令
Z=\bigl(V(P_1)\cup V(P_2)\bigr)\setminus\{A,B\}.
在原图 G-Z 中,用 Dijkstra 求最短 A\to B 路 R。
若存在,则
P=P_1\circ R\circ P_2
是合法候选。
这里删除的是顶点,不是边。因此三部分除连接端点外互不相交,拼接结果一定简单。同时,
\begin{aligned}
w(P)
&=d(A)+w(R)+D-d(B)\\
&=D+\bigl(d(A)-d(B)\bigr)+w(R)\\
&>D.
\end{aligned} \tag{4}
注意,中段 R 不需要额外满足“第一条边后退”“最后一条边后退”等约束。只要 d(A)>d(B),严格非最短性就已经有保证。
到这里,算法非常直接:
枚举 (A,B,e,f),找任意一对满足条件的不交外侧路径,删除它们的顶点,在原图求中段最短路,更新答案。
每个产生的候选都合法。真正需要证明的是:至少有一组枚举能够保住最优答案。
三、正确性:两次图变换只出现在证明中
这是改进里最关键的部分。
3.1 定义一个不实际构造的捷径图 K
图 K 的顶点集是 S。
它保留全部紧边 F。此外,对于每对满足 d(x)>d(y) 的核心顶点,定义
c_{xy}
=
\min\left\{
w(R):
R\text{ 是 }x\to y\text{ 路径,且内部顶点不在 }S
\right\}.
这里允许 R 是直接边。若 c_{xy}<\infty,就在 K 中放一条权重为 c_{xy} 的 x\to y 边。
因此 K 只有两类边:
\text{原始紧边,或者严格降低 }d\text{ 的捷径。}
算法不计算这些捷径,也不构造 K。
所有 K 中的边都满足
w_K(x,y)\ge d(y)-d(x),
而原来的核心最短路仍然存在,所以
\operatorname{dist}_K(s,v)=d(v),\qquad
\operatorname{dist}_K(v,t)=D-d(v).
于是 K 的每个顶点仍然处于某条最短 s-t 路上。
现在取原图的一条最优严格次短路 P^*。如果第一部分没有保住它,那么它的每段非紧核心间连接都是下降的。把这些连接分别换成 K 中相应的最便宜捷径,得到:
- 一条简单的核心顶点序列,因为 P^* 没有重复核心顶点;
- 至少包含一条下降边,因此仍严格非最短;
- 长度不增加。
故有
\boxed{\operatorname{OPT}_K\le \operatorname{OPT}_G.} \tag{5}
此时还不能直接声称 K 中的简单路能展开成原图简单路。不同捷径可能经过同一个非核心顶点。这个风险要留到最后单独解决。
3.2 在证明中细分紧边,调用 CWZ 核心引理
仅在证明中,把 K 的每条紧边按照核心顶点的不同 d 值细分,使每条前进边只跨一个层间隙;下降边不变。记所得分层图为 L。
新增虚拟顶点只有一条入边、一条出边,因此细分前后的完整简单路径保持一一对应,长度不变。
对 L 中的一条最优严格次短路,设中段从第一条后退边的起点 A,延伸到最后一条后退边的终点 B。CWZ 的 Lemma 5.4 保证
d(A)>d(B).
由于下降边没有被细分,A,B 都是原来的核心顶点。(arXiv)
其 Lemma 5.5 进一步保证,存在两条跨同一层间隙的前进边,使至少一对满足指定过边条件的不交外侧路径存在;并且任意一对满足条件的外侧路径,都避开该最优中段的内部顶点。(arXiv)
我们只调用这个引理,不修改它的证明。
3.3 为什么可以合并所有细分位置?
设引理选中的两条细分边,分别来自原始紧边 e,f。
它们跨越同一层间隙,所以原始 e,f 的高度区间必然满足式 (2)。
关键是:
对端点位于 S 的前进路径,“经过原边 e 的某条细分子边”等价于“经过整条原边 e”。
原因很简单:细分产生的内部顶点没有其他进出口。
因此,不管引理选中原边 e 的哪一个细分位置,约束的都是同一个原始路径集合。对 f 也一样。
这意味着,我们枚举原始 (A,B,e,f) 后选出的任意合法外侧路径对,细分后都满足引理选定的过边约束,从而避开最优中段。
所以:
\boxed{
\text{只需枚举原始边对,不必再枚举层或细分位置。}
}
这里省掉了一个层数因子。
3.4 捷径展开可能重复顶点,但原图 Dijkstra 可以修复
设 K 的最优中段为
R_K^*:A\to B.
由上述隔离性质,算法选出的 P_1,P_2 避开它的所有内部核心顶点。
把 R_K^* 中的捷径展开为原图路径,得到一个 A\to B walk,记为 W。它可能重复非核心顶点,但有两个重要性质:
第一,外侧路径完全位于核心 S,而每条捷径的内部顶点都位于 V\setminus S。
第二,中段的内部核心顶点已经由隔离引理保证不在外侧路径上。
因此,整个展开后的 W 都存在于
G-Z
之中,而且
w(W)=w(R_K^*).
原图 Dijkstra 找到的最短 A\to B 路 R 于是满足
w(R)\le w(W)=w(R_K^*).
严格正权保证 R 简单。即便去掉了展开过程中产生的回路,也不会意外变成最短 s-t 路,因为式 (4) 中的 d(A)>d(B) 始终不变。
最终,
\begin{aligned}
w(P_1\circ R\circ P_2)
&\le d(A)+w(R_K^*)+D-d(B)\\
&=\operatorname{OPT}_K\\
&\le\operatorname{OPT}_G.
\end{aligned} \tag{6}
左边又是一条原图中的合法严格非最短简单路,所以不可能小于 \operatorname{OPT}_G。因此所有不等式都取等号,算法找到了最优答案。
这就完成了正确性证明。
尤其值得强调:我们并不需要证明“所有捷径都能无冲突展开”。我们只需要证明,在已经固定并删除外侧路径后,最优中段能够展开成一个残图中的 walk。剩下的简单性由原图最短路负责。
四、复杂度:枚举 q^2p^2 组,每组在原图上工作
候选参数数量至多为
q^2p^2.
每组参数的工作量为
O(q+p)+O(m+n\log n).
再加上容易部分,总时间为
O\!\left(
(q+q^2p^2)(m+n\log n)
\right). \tag{7}
先删除从 s 不可达或无法到达 t 的顶点后,有 m\ge n-1。结合 q\le n,\ p\le m,得到
\boxed{
O(n^2m^3\log n)
=
\widetilde O(n^2m^3).
}
对比如下。前两行分别是论文正式给出的界,以及作者注明的可能改进方向;第三行是上述推导。(arXiv)
| 方案 |
一般图 |
m=\Theta(n) |
m=\Theta(n^2) |
| CWZ 原定理 |
\widetilde O(n^4m^3) |
\widetilde O(n^7) |
\widetilde O(n^{10}) |
| 作者提到的免细分方向 |
\widetilde O(n^4m^2) |
\widetilde O(n^6) |
\widetilde O(n^8) |
| 本次改写 |
\widetilde O(n^2m^3) |
\widetilde O(n^5) |
\widetilde O(n^8) |
这里的两个实质变化是:合并同一原始边对对应的所有层位置;并且证明残图最短路可以直接在原图运行,不承受捷径稠密化和细分的规模膨胀。
时间界按精确加法、比较的算术模型计;有理数输入的位复杂度需要另计。
实现中也不必依赖难写的线性双路径算法
我写的参考实现使用了一个更朴素、但经过批量预处理的 DAG 动态规划。
固定两个源点,记录每对终点是否存在顶点不交的两条路径。在转移时,回退拓扑序较大的终点,可以在 O(qp+q^2) 时间内求出全部终点对并保存路径前驱。
对所有 B 预处理源对 (s,B),再在反图上对所有 A 预处理源对 (t,A),总预处理为
O(q^2p),
空间为 O(q^3)。之后恢复一对路径只需 O(q) 时间。因此参考代码同样没有在每组枚举中额外乘上一个 q。
五、一个多后退边的例子,以及实际验证
例如取六个顶点 0,\ldots,5,高度
d=(0,2,4,5,7,8).
紧边为
01,\ 12,\ 23,\ 34,\ 45,\ 04,\ 13,\ 25,
每条紧边权重取两端高度差。另加两条后退边:
4\to3\text{,权重 }3;\qquad
3\to1\text{,权重 }4.
最短路长度为 8,严格次短路为
0\to4\to3\to1\to2\to5,
长度
7+3+4+2+4=20.
这里中段是
4\to3\to1,
含两条后退边;外侧路径是 0\to4 与 1\to2\to5。因此本算法并没有把问题错误地简化为“最短路加一条非紧边”。
参考实现已经与“枚举该图所有简单 s-t 路,再取第二个不同长度”的穷举答案对拍了 14,546 个实例,包括全部 4,096 个四顶点无自环无权有向图,以及正整数权、正有理数权、大量并列最短路、核心外绕行和多后退边实例,未发现不一致。有限测试只用于检查实现,不替代上面的证明。
当前能够完整落实的改进是:稀疏图七次方降到五次方,而且仍然求最优的严格非最短简单路,不只是判断其存在。
再向下优化,具体瓶颈已经变成了这 q^2p^2 组不同删点集下的最短路查询。不能直接用一次 APSP 替代,因为被删除的两条外侧路径随 (A,B,e,f) 改变。进一步降低指数,需要压缩这些外侧路径的选择,或者找到能批量处理这些特殊删点集的结构;上述五次方界则不需要再假设这样的新结构。
TCS 论文就是简单。