- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于链表的Dijkstra算法优化研究
摘要:迪杰斯特拉算法是图论中计算最短路径的经典算法,但在实际使用中该算法耗费大量的计算时间和存储空间。通过对传统迪杰斯特拉算法的深入分析,在计算时间和存储空间上对该算法提出了一种新的优化方案,并给出了优化后的详细算法。改进算法从消除冗余计算和冗余存储入手,采用链表数组作为存储结构。经算法复杂度分析,优化后的迪杰斯特拉算法在求解最短路径问题时在时间和空间复杂度上都有明显的提高。该优化算法操作性强,具有一定的实用价值。
关键词:最短路径;迪杰斯特拉算法;优化研究;链表
中图分类号:TP312文献标识码:A文章编号:1009-3044(2008)26-1702-02
Optimization Research for Dijkstra Algorithm Based on Linked List
ZHANG Hong-ke
(Tongji University,Shanghai 200122,China)
Abstract:Dijkstra algorithm is a classic algorithm for computing the shortest path, but it uses lots of time and memories in practice. On the basis of analyzing Dijkstra algorithm thoroughly, it shows a new optimal solution to the problem, and gives the detail algorithm. The improved algorithm can avoid redundant computing and storage, and uses linked list array as storage structure. The time complexity and space complexity of the algorithm are improved markedly in computing the shortest path. The improved algorithm with strong maneuverability could have important applications.
Key words: shortest path; dijkstra algorithm; optimization study; linked list
1 引言
在现实生活工作中,很多问题都与寻找一个图的最短路径密切相关,如交通路线的选择、城市地下管道的布局、网络线路的铺设等问题。这里的最短路径不仅仅指地理意义上的距离最短,还可引申为最少费用、最短时间、吞吐量最大等约束条件。迪杰斯特拉算法于1959年由E.W .Dijkstra提出,是图论中求最短路径的一个著名的算法,使用其可以求得图中一点到其他各顶点的最短路径。其中以先求得最短路径树著称。但在实际应用中,使用该算法会耗费大量的计算时间和存储空间。虽然有很多人对迪杰斯特拉算法提出了一些优化算法,但都达不到最理想的结果。针对这个问题,本文将基于迪杰斯特拉算法基本思想,在计算时间和存储空间上对其进行优化,使得迪杰斯特拉算法在求解最短路径问题时达到时间的下限。
2 传统迪杰斯特拉算法的主要思想
最短路径问题是指在一个带权值的图中找出两个指定节点间的一条权值和最小的路径。而迪杰斯特拉算法是经典的解决最短路径问题的算法,它可以找出指定节点到其他各个节点间的最短路径,其主要思想是首先从源点求出长度最短的一条路径,然后通过对路径长度迭代得到从源点到其他各目标节点的最短路径。
在具体计算中,我们引入一个辅助向量D,它的每一个分量D[i]初值为弧上的权值。若v到vi没有边,则置D[i]为∞。显然,从v出发的长度最短的一条最短路径就是长度为D[j]=min{D[j] | vi∈V}的路径,该路径为(v,vi)。设下一条长度次短的最短路径的终点是vk,则这条路径或者是(v,vk) ,或者是(v,vj,vk)。它的长度或为从v到vk的弧上的权值,或为D[j] 和从vj到vk的弧上的权值之和。
设一维数组S为已找到最短路径的终点集合,可证下一条最短路径(设其终点为x)或者是弧(v,x) ,或者是中间只经过S中的顶点而最后到达顶点x的路径。这可用反证法来证明。假设在此路径上有一个顶点不在S中,则说明存在一条终点不在S 而长度比此路径短的路径。但是这是不可能的,因为迪杰斯特拉算法是按路径长度递增的次序来产
文档评论(0)