动态图最短路算法的比较与优化
- 格式:pdf
- 大小:2.09 MB
- 文档页数:45
最短者即为从源点到目标点的最短路径。Dijkstra 算法尽管简单优美,但在数据量较大的路 径网络中往往效率不高。
这是因为在计算从源点 s 到目标点 t 的最短路径时,一旦 s 点与 t 点相距很远,并且顶 点数庞大时,这一算法至少会访问到图中和 s 点距离小于 s-t 距离的所有点以及与它们相邻
关键词:
动态图 最短路 优化 算法 自创思路
选题亮点:
最短路问题由于其带来的经济利益,是当今社会许多企业争相研究,希望取得突破的领 域。同时,随着交通网的迅速发展和改造,动态图的最短路成为当下尤为重要的一大议题。 本文选取这一主题,将生活实际和计算机算法相结合,使得平时存在于理论中的内容也可以 应用到我们身边。
动态图最短路算法的比较与优化
撰写人:陶重年 杨骏昭 许倬昱
论文摘要:
广泛应用的信息技术为我们的生活带来了极大的便利。然而如何进一步提高并发展现有 技术,使其能够动态适应我们生活中的需求,仍然值得我们进一步研究。
例如与我们生活息息相关的路径选择问题,在面对“条条大路通罗马”的千百条路径, 如何选择出最省时省费用的路径对于个人和企业来说都无疑是一个至关重要而又有着一定 难度的问题。本文主要考虑动态化最短路径问题,从“无权图的动态最短路”,“加权图的动 态最短路”和“地图上动态最短路”三个模块入手,分析和比较动态图上的最短路算法并加 以优化 1。
的所有点,从而使算法效率大大降低。针对这些朴素的算法有很多改进方法使得其效率大大 提高,运行时间可以缩短为原来的几十分之一甚至几百分之一。本文是便是在已有算法的基 础上做一些比较分析和改进,从而起到提高最短路算法效率的作用。
本文的创新点: ○1 以伪代码的形式介绍了几种经典最短路算法的优化改进思路,并对某些优化给出了理 论证明。同时,为了方便验证,我们还在附件中附上了作者自己编写的程序和使用的测试数 据。 ○2 为了验证优化算法的有效性,我们以大规模的数据集作为运行环境,将优化前后的几 种算法进行了测试,列出了各种算法的实际运行结果,并进行了分析、比较,从而证明了我 们的算法相对于原算法所具有的高效性。
解法亮点:
大多数程序如 GIS,虽然会用到最短路算法,但一般都是使用较为朴素的方法,如 BFS 算法(针对无权图的最短路问题)和 Dijkstra 算法(针对加权图的最短路问题)。然而,这 些算法通常适用于小规模问题,尤其是在某些特殊情况下,效率会大打折扣。这一算法的原 理是按照到源点的距离由小到大遍历路径中各顶点,并将到达目标点的各条路径记下,其中
动态图最短路算法的比较与优化
参赛队员姓名 : 所 在 中 学: 所 属 省 份: 国 家 / 地 区:
指导教师姓名 :
陶重年 杨骏昭 许倬昱 南京外国语学校 江苏省 中国
Simon Fraser University 王健楠
目录
1.引言:背景介绍 ----------------------------------------------------------------------- 3 1.1 选题意义 --------------------------------------------------------------------- 3 1.2 选题动机 --------------------------------------------------------------------- 3 1.3 本文的创新点 ----------------------------------------------------------------- 3
4.2.1 A*算法 ----------------------------------------------------------------18 (1)算法介绍 --------------------------------------------------------------18 (2)伪代码 ----------------------------------------------------------------20 (3)有关算法的讨论 -------------------------------------------------------20
4.2.2 双向 A*算法 -----------------------------------------------------------24 4.2.3 限制寻路算法 ---------------------------------------------------------25 4.3 算法实现与比较---------------------------------------------------------------27 5.总结 ---------------------------------------------------------------------------------35 5.1 结论 --------------------------------------------------------------------------35 5.2 应用与展望 -------------------------------------------------------------------36
2.无权图的动态最短路 ------------------------------------------------------------------ 4 2.1 问题描述----------------------------------------------------------------------- 4 2.2 测试环境----------------------------------------------------------------------- 4 2.2.1 数据集 ------------------------------------------------------------------ 4 2.2.2 运行环境 ---------------------------------------------------------------- 4 2.3 算法介绍 ----------------------------------------------------------------------- 5 2.3.1 广度优先搜索(BFS) -------------------------------------------------- 5 (1)算法简介 ------------------------------------------------------------ 5 (2)伪代码 -------------------------------------------------------------- 5 (3)时空复杂度 --------------------------------------------------------- 6 (4)BFS 算法的测试 ----------------------------------------------------- 6 2.3.2 双向广度优先搜索 (双向 BFS) --------------------------------------- 7 (1)算法简介 ------------------------------------------------------------ 7 (2)双向 BFS 算法的测试 ------------------------------------------------ 7 2.3.3 压位 ------------------------------------------------------------------- 8 (1)压位的本质:将整数用作集合 --------------------------------------- 8
(2)空间复杂度 --------------------------------------------------------- 8 (3)伪代码 -------------------------------------------------------------- 9 (4)压位双向的 BFS 算法的测试和改进 ---------------------------------- 9 (5)程序运行数据 ------------------------------------------------------10 3.加权图的动态最短路 -----------------------------------------------------------------11 3.1 问题描述 ----------------------------------------------------------------------11 3.2 算法介绍 ----------------------------------------------------------------------12 3.2.1 Dijkstra 算法----------------------------------------------------------12 (1)算法简介 -----------------------------------------------------------12 (2)伪代码 -------------------------------------------------------------12 3.2.2 双向 Dijkstra 算法 ----------------------------------------------------13 (1)算法简介 -----------------------------------------------------------13 (2)Dijkstra 算法和双向 Dijkstra 算法的测试---------------------------14 3.2.3 SPFA 算法 ------------------------------------------------------------14 (1)算法简介 -----------------------------------------------------------14 (2)伪代码 -------------------------------------------------------------15 (3)SPFA 算法的两个优化 ----------------------------------------------15 (4)程序运行数据 ------------------------------------------------------15 (5)SPFA 及其优化的测试 ----------------------------------------------16 4.地图上动态最短路 -------------------------------------------------------------------17 4.1 问题引入 ----------------------------------------------------------------------17 4.2 算法介绍----------------------------------------------------------------------18