`
444878909
  • 浏览: 641645 次
文章分类
社区版块
存档分类
最新评论

Dijkstra算法详解

 
阅读更多

1.dijkstra算法简介

Dijkstra算法是由E.W.Dijkstra于1959年提出,又叫迪杰斯特拉算法,它应用了贪心算法模式,是目前公认的最好的求解最短路径的方法。算法解决的是有向图中单个源点到其他顶点的最短路径问题,其主要特点是每次迭代时选择的下一个顶点是标记点之外距离源点最近的顶点。但由于dijkstra算法主要计算从源点到其他所有点的最短路径,所以算法的效率较低。

2.dijkstra算法基本过程

假设路网中每一个节点都有标号是从出发点s到点t的最短路径长度;表示从s到t的最短路径中t点的前一个点。求解从出发点s到点t的最短路径算法的基本过程为:

1.初始化。出发点设置为:

标记起源点s,记k = s,其他所有点设为未标记。

2.检验从所有已标记的点k到其他直接连接的未标记的点j的距离,并设置:


3.选取下一个点。从所有未标记的点中选取 最小的点i,点i被选为最短路径中的一点,并设为已标记的。

4.找到点i的前一点。从已经标记的点集合中找到直接连接到点i的点,并标记为 。

5.标记点i。如果所有的点已标记,则算法结束。否则,记k = i,转到2继续。

从以上算法的步骤中可以看出 :dijkstra算法的关键部分是从未标记的点中不断地找出距离源点距离最近的点,并把改点加入到标记的点集合中,同时更新未标记的点集合中其余点到起始点的最短估计距离[z1]

以一个带有权值的无向图为例,用dijkstra算法分析从源点A到目标点F的最短路径。


1. 用带有权值的一个矩阵w表示含有n各节点的带权无向图, 代表弧段 的权值,如果从节点 到节点 不连通,那么 ,带权值图邻接矩阵如下图所示.设置A为源点,G为目的点, 代表从节点A到有向图中其他节点 的最短路径长度。设置初始值 代表标记的节点集合。


2. 是从A点出发求出的一条最短路径上的终止节点,令


3. 修改起始节点A到集合之间的最短路径的长度值,如果d(j)+w(j,k) < d(k),那么d(k) = d(j) + w(j,k);

4. 重复步骤2、3的操作N-1次,最终得到从起始节点A到其他节点的最短路径,按照递增的顺序排列路径的长度。

3.dijkstra算法的流程图如下所示:


分享到:
评论

相关推荐

    Dijkstra与SPFA算法的不同之处对比

    SPFA算法 此处为SPFA算法详解 用dis数组记录源点到有向图上任意一点...此处为Dijkstra算法详解 清除所有点的标号; 设d[0]=0,其他d[i]=INF;//INF是一个很大的值,用来替代正无穷 循环n次 { 在所有未标号结点中,

    自动驾驶路径规划-Dijkstra算法.zip

    Dijkstra算法详解,另外还包含了自动驾驶学习资料的获取: 涵盖感知,规划和控制,ADAS,传感器; 1. apollo相关的技术教程和文档; 2.adas(高级辅助驾驶)算法设计(例如AEB,ACC,LKA等) 3.自动驾驶鼻祖mobileye的...

    Dijkstra算法原理详解

    Dijkstra算法原理详解, 弄不懂的可以看一下

    mapbasic文档

    mapbasic开发文档,用于介绍mapbasic的使用方法以及操作详解,简单易懂。

    Python使用Dijkstra算法实现求解图中最短路径距离问题详解

    本文实例讲述了Python使用Dijkstra算法实现求解图中最短路径距离问题。分享给大家供大家参考,具体如下: 这里继续前面一篇《Python基于Floyd算法求解最短路径距离问题》的内容,这里要做的是Dijkstra算法,与Floyd...

    Dijkstra算法

    超详解的最短路劲算法,思路讲的很细,跟我以前上图论讲的思路一样。

    经典算法详解

    本经典算法研究系列,涵盖 A*.Dijkstra.DP.BFS/DFS.红黑树.KMP.遗传.启发式搜索.图像特征提取SIFT.傅立叶变换.Hash.快速排序.SPFA.快递选择 SELECT 等15 个经典基础算法,共计 31 篇文章,包括算法理论的研究与阐述...

    数学建模常用算法详解及代码汇总

    1 Dijkstra算法 2 弗洛伊德算法 3 动态规划 4 概率算法 5 灰色预测 6 类比法 7 蒙特卡洛 8 模拟退火,禁忌搜索,遗传算法,神经网络-MATLAB程序合集 9 模拟退火算法 9 神经网络 10 搜索算法 11 图论 12 遗传算法 13...

    dijkstra A*和D*等算法介绍

    很详细的路径规划算法,dijkstra,A*和D*,还有很多D*的变种算法,有详细的例子分步讲解

    java版,关于djkstra算法的详解

    文档中是一个java写的dijkstra算法,其算法本身是从网络上下的,不同的地方是在关键步骤后面加了详细注释,由于没有在算法本身上进行创作,所以只求一点积分。对与dijkstra算法的初学者和弄不懂算法过程的人可以进行...

    数学建模十大算法程序详解

    图论,分治算法,动态规划,Floyd算法,dijkstra算法,穷举法求解0-1整数规划的matlab程序,免疫算法

    数学建模重要10大算法详解+程序源码+数模案例

    dijkstra,Floyd,分治算法,动态规划,图论,搜索算法,概率算法,模拟退火禁忌搜索,灰色预测,神经网络,聚类,遗传算法,模拟退火等等

    数学建模十大算法知识汇总盘点及程序详解

    Dijkstra算法 开放分类: 算法、单源最短路径。 Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法。 组合算法是算法分析学当中非常重要的一个分支。 模拟退火算法...

    数学建模MATLAB必备程序源代码数学建模十大算法程序详解资料合集.zip

    数学建模MATLAB必备程序源代码数学建模十大算法程序详解资料合集: [MATLAB语言常用算法程序集]7月24.pdf 利用Matlab编程进行马尔可夫预测.pdf 应用MATLAB求线性方程组的Cramer法则方法探讨.pdf 数学建模MATLAB必备...

    数学建模有十大算法程序详解

    详细的解释了数学建模中的常用的十种算法 dijkstra、模拟退火、Floyd算法、动态规划、分治算法...

    基于稀疏图上的Johnson算法的详解

    算法步骤简述: 1.计算图G加入新结点后的图G’,加入的新结点0...6.对图G中所有结点运行Dijkstra算法计算与其他顶点最短距离d'[u][v] (此处假定G和w集合是分开存储的。直接使用G’也可以,因为0结点对其他结点是不可达

    银行家算法实现(代码全面解析)

    模拟实现Dijkstra的银行家算法以避免死锁的出现.分两部分组成: 第一部分:银行家算法(扫描) 1.如果Request,则转向2;否则,出错 2.如果Request,则转向3,否则等待 3.系统试探分配请求的资源给进程 4.系统...

    Python基于Floyd算法求解最短路径距离问题实例详解

    Floyd算法和Dijkstra算法,相信大家都不陌生,在最短路径距离的求解中应该算得上是最为基础和经典的两个算法了,今天就用一点时间来重新实现一下,因为本科的时候学习数据结构才开始接触的这个算法,当时唯一会用的...

    数据结构算法

    十字链表 经典算法题每日演练——第二十题 三元组 经典算法题每日演练——第十九题 双端队列 经典算法题每日演练——第十八题 外排序 经典算法题每日演练——第十七题 Dijkstra算法 经典算法题每日演练——第十六题 ...

Global site tag (gtag.js) - Google Analytics