引言
Dijkstra算法是一种经典的单源最短路径算法,用于在加权图中找出从一个指定起点节点到其他所有节点的最短路径。该算法适用于含有非负权重边的有向和无向图。由荷兰计算机科学家艾兹赫尔·戴克斯特拉(Edsger W. Dijkstra)在1956年提出,它是解决图中最短路径问题的有效方法之一。
定义
Dijkstra算法是一个计算图中单源最短路径的算法,用于计算加权图中从单一源点到所有其他节点的最短路径。该算法适用于包含非负权重的有向和无向图。通过贪心策略,Dijkstra算法逐步扩展最近的未处理节点,并更新其邻居节点的距离,直到所有节点的最短路径都确定。
基本原理及公式介绍
Dijkstra算法的基本原理及公式推导都围绕如何有效地找到从单一源点到图中所有其他节点的最短路径。该算法的核心是逐步更新路径长度估计值,并保证每次更新都是基于当前已知的最短路径。
基本原理
Dijkstra算法从源点开始,逐渐扩展到整个图,通过贪心策略逐步确定每个节点的最短路径。这一过程可以分为几个关键步骤:
-
初始化:
- 将所有节点的最短路径估计初始化为无限大(表示尚未找到实际路径),除了源点,其值初始化为0(从源点到自身的距离)。
-
节点选择:
- 选择与源点距离最短的节点作为当前处理节点。这一选择基于贪心策略,以保证每一步都处理当前已知路径最短的节点。
-
松弛操作:
- 对当前处理节点的每一个未处理邻接节点进行松弛操作,尝试通过当前节点更新邻接节点的最短路径估计。松弛操作的核心是检查是否存在更短的路径到达邻接节点。
公式介绍
设节点集合 V V V 中的节点 u u u 为当前选择的节点,节点 v v v 为 u u u 的任意邻接节点。设 d [ v ] d[v] d[v] 表示从源点到节点 v v v 的当前已知最短路径长度, w ( u , v ) w(u, v) w(u,v) 表示从节点 u u u 到 v v v 的边的权重。
松弛操作的关键公式如下:
i f : d [ u ] + w ( u , v ) < d [ v ] {if : } d[u] + w(u, v) < d[v] if:d[u]+w(u,v)<