形式陈述
给定有限有向或无向图、源点 ,并假设每条边权 ,Dijkstra 算法维护暂定距离 与已结算集合 。初始化 、其余为 ;反复从未结算顶点中取 最小者 加入 ,再对每条出边执行松弛
每个有限 都是一条已发现 路的权重,所以 。归纳假设 中距离均已正确。取最小候选 ,在一条最短 路上令 为第一个不在 的顶点, 为它的前驱。松弛 后已有 ;非负权又给出 。由最小键选择,
故 ,可以永久结算。这个割论证同时解释了非负权假设出现在哪里。
算法以按键取最小值的优先队列公理库优先队列Priority queue · Priority queue ADT按键的优先次序反复访问并移除当前最小元素的抽象数据类型。实现。设 、,并假设邻接表、精确权重加法与比较在单位成本 RAM 中计费:
- 二叉堆加顶点句柄执行 次
extract-min、至多 次 decrease-key,最坏时间 、额外空间 ;
- 不支持
decrease-key 时可插入新记录并惰性跳过旧记录,至多有 个堆项,时间 、空间 ;
- Fibonacci 堆公理库Fibonacci 堆Fibonacci heap以延迟合并和级联切断取得常数摊还插入、合并与减键的可并优先队列。把理论界改为 摊还时间;
- 邻接矩阵配合线性扫描最小未结算键,确定性最坏时间为 、额外空间 (不计矩阵本身)。
直觉
Dijkstra 把已结算区看成从源点扩张的距离球。堆中每个键代表一条从球内跨出到该顶点的最佳已知路线;取最小键就是选择下一层边界。由于边权不为负,任何尚未进入球的绕行都不可能先走得更远、再以负代价回来改短已结算点。
松弛负责生成与更新候选,贪心公理库贪心算法Greedy algorithm每一步作局部最优且不回溯选择的算法设计范式。选择负责宣布一个候选不再变化。只做松弛而没有最小键次序,是另一类标签修正算法;只取最小键而不扫描出边,也无法把正确距离传播给后继。
Dijkstra 的取最小与松弛
例子与边界
在边
上,结算 后暂定 ;结算 后变为 ;结算 后又把 降为 。父指针恢复路径 ,其权重 。
负边反例不需要负圈。取
算法先结算 并令 ;等到结算 ,真正到 的成本才降为 。标准算法不会重新展开已结算的 ,于是返回 ,而路径 的权重是 。这表明非负性是足够且可局部检查的前提;“图中没有负圈”仍不足以使用本算法。
负权图可改用Bellman–Ford 算法公理库Bellman–Ford 算法Bellman–Ford algorithm通过反复松弛边求含负权边图的单源最短路并检测可达负环。。零权边和零权圈不破坏正确性,但可能产生多个相同键;平局以任意顺序结算都安全。不可达顶点始终为 ,实现可在最小键已为无穷时停止。平行边逐条松弛即可,同方向只保留最小权边也不改变距离;非负自环不会改进任何估计。
推论与应用
Dijkstra 解决非负权最短路问题公理库最短路问题Shortest-path problem在有限有向实权图中寻找源点到各顶点的最小有向游走成本。;图表示公理库图的表示Graph representation · Adjacency-list and adjacency-matrix representations依据图的类型与所需操作选择邻接表、邻接矩阵或边集表示的方法。决定能否只扫描现有边,队列实现决定最小键与减键成本。若只查询一个目标 ,当 被取出并结算时即可停止;在此之前仅仅“发现 ”不构成最优性证书。
Johnson 算法公理库Johnson 全源最短路算法Johnson's algorithm · Johnson all-pairs shortest paths以 Bellman–Ford 势函数把无负环图重赋为非负边权,再重复 Dijkstra 求稀疏图全源最短路。先用势函数把含负边、无负圈的图重赋为非负权,再逐源调用 Dijkstra。A*公理库A* 搜索A* search · A-star search以已走代价与到目标的可采纳下界之和排序候选,并在一致性条件下保持最短路正确性的启发式搜索。在一致启发函数下等价于对约化非负权运行同一结算逻辑;令启发函数 ,A* 恰好退化为 Dijkstra,因此本算法是它的一个特例。
参考资料
- Edsger W. Dijkstra, “A Note on Two Problems in Connexion with Graphs,” Numerische Mathematik 1, 1959, pp. 269–271。
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,§22.3。
- Jon Kleinberg and Éva Tardos, Algorithm Design, Pearson, 2005,§4.4。