形式陈述
设 D = ( V , A ) 为有限有向图 公理库 有向图 Directed graph · Digraph 以顶点有序对为弧、能够保留连接方向的有限简单图结构。 ,弧权函数 w : A → R 取值于实数系 公理库 实数系 Real number system · Ordered complete field 满足序域公理与上确界完备性的数系。 。固定源点 s 。对从 s 到 v 的有向游走
W = ( v 0 = s , v 1 , … , v k = v ) , 定义游走成本
是 到 的 有 向 游 走 w ( W ) = ∑ i = 1 k w ( v i − 1 , v i ) , δ ( s , v ) = inf { w ( W ) : W 是 s 到 v 的有向游走 } . 若 v 从 s 不可达,约定 δ ( s , v ) = + ∞ 。长度为零的空游走给出 δ ( s , s ) ≤ 0 ;若没有从 s 出发又回到 s 的负权圈,则等号成立。若存在从 s 可达、且还能到达 v 的负权有向圈,则可在前往 v 前把该圈重复任意多次,故 δ ( s , v ) = − ∞ 。除此之外,δ ( s , v ) 若有限便由一条简单有向路达到:任意游走中重复顶点之间形成有向闭游走;其中若含负圈便落入前述 − ∞ 情形,否则可删去一个非负闭合段而不增加成本,反复删除后只剩至多 | V | − 1 条弧。
对每条弧 ( u , v ) ,扩展实数意义下的三角不等式为
δ ( s , v ) ≤ δ ( s , u ) + w ( u , v ) . 松弛操作维护距离上界 d ,尝试令
d [ v ] ← min { d [ v ] , d [ u ] + w ( u , v ) } . 每个有限估计都应由一条已发现游走见证,因此不会凭空低于真实有限最短距离。若一条 s 到 v 的最短路经过 u ,其到 u 的前缀也必须最短;否则用更短前缀替换便会改进整条路。这一最优子结构和“信息以什么顺序传播”是两件事,后者取决于权重条件与具体算法。
直觉
最短路按整条路线的可加成本比较,不按边数或某条局部最轻边决胜。松弛把一个已有前缀再延伸一步;当所有相关三角约束都稳定时,每个可达且不受负圈影响的顶点才得到最终距离。
边权决定可采用的传播顺序。非负权让距离波前只能向外增长,Dijkstra 因而可以永久结算最小候选;允许负边时,后来发现的路线可能反超早先候选,Bellman–Ford 要容许反复修正;DAG 没有回流,按拓扑序扫描一次即可,即使边权为负。
用游走定义 δ 可以如实表示负圈造成的无界下降。若只在有限多条简单路中取最小值,即使存在可利用的负圈也会返回一个有限数,从而掩盖“成本可任意降低”这一算法上不可忽略的事实。
图片加载失败 最短距离与最短路树
例子与边界
弧 s → a 、a → t 、s → t 的权依次为 2 , 3 , 6 时,路线 s → a → t 的成本 5 优于直达弧。把 a → t 改为 − 4 后,最短成本变为 − 2 ;一条负边没有使问题失去定义,只使依赖非负性的结算方法不再可靠。若再加入 t → a 、权 1 ,则圈 a → t → a 总权为 − 3 ,从圈可达的 a , t 距离均为 − ∞ 。
若另有负圈 x → y → x ,但 x , y 从 s 不可达,它不会影响这次单源查询;两点距离仍为 + ∞ 。同样,可达负圈若不能再到达某个顶点 v ,也不会把 δ ( s , v ) 变成 − ∞ 。零权圈不会改变最短值,却会产生无限多条等成本最优游走;仍可删圈得到一条简单最短路。
平行弧应保留各自权重与身份,不过只求距离时,同方向端点相同的弧只保留最小权者也不改变答案。无权图可把每条弧权设为 1 ,用 BFS 求最少弧数;多源问题可加入到各源的零权超级源。若成本依赖到达时刻、前一条边或不可相加的多重指标,就必须扩展状态或改变代价代数,普通最短路模型不再充分。
推论与应用
Dijkstra 公理库 Dijkstra 算法 Dijkstra's algorithm 在非负边权图中逐次确定最短距离的单源最短路算法。 处理非负权单源情形,Bellman–Ford 公理库 Bellman–Ford 算法 Bellman–Ford algorithm 通过反复松弛边求含负权边图的单源最短路并检测可达负环。 允许负边并检测源可达负圈,Floyd–Warshall 公理库 Floyd–Warshall 算法 Floyd–Warshall algorithm 以允许的中间顶点集合为阶段计算全部顶点对最短路。 用矩阵动态规划求所有点对距离。Johnson 算法 公理库 Johnson 全源最短路算法 Johnson's algorithm · Johnson all-pairs shortest paths 以 Bellman–Ford 势函数把无负环图重赋为非负边权,再重复 Dijkstra 求稀疏图全源最短路。 先以势函数消去负边,再在稀疏图上逐源运行 Dijkstra;A* 公理库 A* 搜索 A* search · A-star search 以已走代价与到目标的可采纳下界之和排序候选,并在一致性条件下保持最短路正确性的启发式搜索。 面向单目标查询,用可证明的下界改变候选展开次序。这些算法求解同一模型的不同输入区域,权重假设不能互换。
最短路树与最小生成树 公理库 最小生成树 Minimum spanning tree · MST 连通加权图中总边权最小的生成树及其算法问题。 的目标不同。前者固定源点并分别最小化根到各顶点的距离;后者最小化整棵连接树的边权总和。三角形边权 w ( s a ) = 2 , w ( a b ) = 2 , w ( s b ) = 3 时,从 s 的最短路树取 s a , s b ,总权 5 ;MST 取 s a , a b ,总权 4 ,但树上 s 到 b 的距离 4 又大于原图的 3 。
逐次最短路最小费用流 公理库 最小费用流的逐次最短路法 successive shortest path · SSP min-cost flow 在残量网络反复沿最短费用路增广,并用顶点势保持约化费用非负。 把最短路作为残量网络中的反复增广子程序,并用势维持约化成本非负;其目标是满足流量约束下的总费用最小,而非只输出一条 s ⇝ t 路径。动态图、时间依赖权和多准则成本也需要另行规定更新接口与代价代数,不能从静态可加边权模型直接外推。
参考资料
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms , 4th ed., MIT Press, 2022,Chs. 22–23, single-source and all-pairs shortest paths。
Jon Kleinberg and Éva Tardos, Algorithm Design , Pearson, 2005,Chs. 4 and 6, shortest paths with nonnegative and general edge costs。