1、1Dijkstra 算法解释本文引用三篇文章:分别是 谢光新 -Dijkstra 算法,zx770424 -Dijkstra 算法,中华儿女英雄 -Dijkstra 算法有兴趣的朋友请引用原文,由于分类很不相同难以查找,此处仅作汇总。谢光新 的文章浅显易懂,无需深入的数学功力,每一步都有图示,很适合初学者了解。zx770424 将每一步过程,都用图示方式和公式代码 伪代码对应也有助于,代码的理解。中华儿女英雄 从大面上总结了 Dijkstra 的思想,并将演路图描叙出来了。起到总结的效果。希望这篇汇总有助于大家对 Dijkstra 算法的理解。2Dijkstra 算法是典型最短路算法,用于计算
2、一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra 算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。简 介Dijkstra(迪 杰 斯 特 拉 )算 法 是 典 型 的 单 源 最 短 路 径 算 法 , 用 于 计 算 一 个 节 点 到 其 他 所 有 节 点 的最 短 路 径 。 主 要 特 点 是 以 起 始 点 为 中 心 向 外 层 层 扩 展 , 直 到 扩 展 到 终 点 为 止 。 Dijkstra 算 法 是 很有 代 表 性 的 最 短 路 径 算 法 , 在 很 多 专 业 课 程 中 都 作
3、 为 基 本 内 容 有 详 细 的 介 绍 , 如 数 据 结 构 , 图 论 ,运 筹 学 等 等 。 Dijkstra 一 般 的 表 述 通 常 有 两 种 方 式 , 一 种 用 永 久 和 临 时 标 号 方 式 , 一 种 是 用OPEN, CLOSE 表 的 方 式 , 这 里 均 采 用 永 久 和 临 时 标 号 的 方 式 。 注 意 该 算 法 要 求 图 中 不 存 在 负 权 边 。算 法 描 述(这 里 描 述 的 是 从 节 点 1 开 始 到 各 点 的 dijkstra 算 法 , 其 中 Wa-b 表 示 a-b 的 边 的 权 值 ,d(i)即 为 最
4、短 路 径 值 )1 置 集 合 S=2,3,.n, 数 组 d(1)=0, d(i)=W1-i(1,i 之 间 存 在 边 ) or +无 穷 大 (1.i 之 间 不 存 在边 )2 在 S 中 , 令 d(j)=mind(i),i 属 于 S, 令 S=S-j, 若 S 为 空 集 则 算 法 结 束 , 否 则 转 33 对 全 部 i 属 于 S,如 果 存 在 边 j-i, 那 么 置 d(i)=mind(i), d(j)+Wj-i, 转 2Dijkstra 算 法 思 想 为 : 设 G=(V,E)是 一 个 带 权 有 向 图 , 把 图 中 顶 点 集 合 V 分 成 两 组
5、 , 第 一 组为 已 求 出 最 短 路 径 的 顶 点 集 合 ( 用 S 表 示 , 初 始 时 S 中 只 有 一 个 源 点 , 以 后 每 求 得 一 条 最 短 路 径 , 就 将 加 入 到 集 合 S 中 , 直 到 全 部 顶 点 都 加 入 到 S 中 , 算 法 就 结 束 了 ) , 第 二 组 为 其 余 未 确 定 最短 路 径 的 顶 点 集 合 ( 用 U 表 示 ) , 按 最 短 路 径 长 度 的 递 增 次 序 依 次 把 第 二 组 的 顶 点 加 入 S 中 。在 加 入 的 过 程 中 , 总 保 持 从 源 点 v 到 S 中 各 顶 点 的
6、最 短 路 径 长 度 不 大 于 从 源 点 v 到 U 中 任 何 顶点 的 最 短 路 径 长 度 。 此 外 , 每 个 顶 点 对 应 一 个 距 离 , S 中 的 顶 点 的 距 离 就 是 从 v 到 此 顶 点 的 最 短路 径 长 度 , U 中 的 顶 点 的 距 离 , 是 从 v 到 此 顶 点 只 包 括 S 中 的 顶 点 为 中 间 顶 点 的 当 前 最 短 路 径 长度 。算 法 具 体 步 骤 ( 1) 初 始 时 , S 只 包 含 源 点 , 即 S=, v 的 距 离 为 0。 U 包 含 除 v 外 的 其 他 顶 点 , U 中 顶 点u 距 离
7、 为 边 上 的 权 ( 若 v 与 u 有 边 ) 或 ) ( 若 u 不 是 v 的 出 边 邻 接 点 ) 。( 2) 从 U 中 选 取 一 个 距 离 v 最 小 的 顶 点 k, 把 k, 加 入 S 中 ( 该 选 定 的 距 离 就 是 v 到 k 的最 短 路 径 长 度 ) 。( 3) 以 k 为 新 考 虑 的 中 间 点 , 修 改 U 中 各 顶 点 的 距 离 ; 若 从 源 点 v 到 顶 点 u( u U) 的 距 离( 经 过 顶 点 k) 比 原 来 距 离 ( 不 经 过 顶 点 k) 短 , 则 修 改 顶 点 u 的 距 离 值 , 修 改 后 的 距 离 值 的 顶 点k 的 距 离 加 上 边 上 的 权 。( 4) 重 复 步 骤 ( 2) 和 ( 3) 直 到 所 有 顶 点 都 包 含 在 S 中 。3复 杂 度 分 析Dijkstra 算 法 的 时 间 复 杂 度 为 O(n2)空 间 复 杂 度 取 决 于 存 储 方 式 , 邻 接 矩 阵 为 O(n2)4567891011Dijkstra 算法的基本思想是:12