【算法杂谈】LJX的迪杰斯特拉算法报告
迪杰斯特拉(di jie qi)算法
这里有一张图:
假设要求从1号节点到5号节点的最短路。那么根据迪杰斯特拉算法的思想,我们先看:
节点1,从节点1出发的一共有3条路,分别是1-6、1-3、1-2。然后我们分别看每条路的权值,发现1-6的权值为14,记录下来、1-3的权值为9,记录下来、1-2的权值为7,记录下来。我们发现好像不能再从1号节点发现什么了,所以,我们把它out掉。
接着按顺序看2号节点,从节点2发出了2条路分别是2-3与2-4,我们接着向计算1号节点一样计算2号节点。先计算2-3,权值为10。咦?我们好像已经在计算1号节点的时候标记过了,也就是说现在到3号节点有两种方案,分别是1-3与1-2-3,通过比较,我们发现9〉7+10,所以标记不变,依旧是9。接下来看2-4,没有被标记过,记录15。Out掉节点2
然后就该节点3了,我们发现有两条路,且都没被标记过,分别记录2与11,out掉节点3
节点4有两条路,发现从3-4更方便标记11。Out掉。
节点6有两条路,3-6方便标记为2。Out掉。
最后5号节点有两条路从4到5最短,5号节点标记为6。
我们达到了光辉的顶点,发现最后路径是1-3-6-5和为20。
迪杰斯特拉算法具有明显的贪心特征,通过每个节点去最优值的过程我们称之为“松弛”,松弛之后,答案显而易见。
实际上对于松弛过程的模拟,核心代码只有两行:
if(dis[v]>dis[u]+e[u][v])
dis[v]=dis[u]+e[u][v];
(咦,你的核心代码为什么没有找最近的节点?哈哈思(sheng)考(lve))
迪杰斯特拉算法的局限性
不难看出(好粗暴的词汇)它的时间复杂度为O((M+N)logN)空间复杂度为O(M)看起来还不错,但它无法解决权值为负数的情况,所以用前先审题哦。
转载于:https://www.cnblogs.com/lijiaxin-blog-cpp/p/5610007.html
【算法杂谈】LJX的迪杰斯特拉算法报告相关推荐
- >算法笔记-动态规划-最短路径迪杰斯特拉算法
算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言 图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...
- dijkstra算法_最短路径问题——迪杰斯特拉算法(Dijkstra)
假期过长,导致停更了好长时间,复习一道算法题找找感觉. 前段时间看到一篇文章,里面提到了统治世界的十大算法,其中之一就是迪杰斯特拉算法(Dijkstra),该算法主要解决的"最短路径&quo ...
- dij算法堆优化_迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少
算法实现步骤: a.初始时,只包括源点,即S = {v},v的距离为0.U包含除v以外的其他顶点,即:U ={其余顶点},若v与U中顶点u有边,则(u,v)为正常权值,若u不是v的出边邻接点,则(u, ...
- dij算法堆优化_迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少(示例代码)...
算法实现步骤: a.初始时,只包括源点,即S = {v},v的距离为0.U包含除v以外的其他顶点,即:U ={其余顶点},若v与U中顶点u有边,则(u,v)为正常权值,若u不是v的出边邻接点,则(u, ...
- 常用算法(八)——迪杰斯特拉算法
迪杰斯特拉算法 大纲目录 迪杰斯特拉算法 迪杰斯特拉算法 一.应用场景-最短路径问题 二.迪杰斯特拉(Dijkstra)算法介绍 三.迪杰斯特拉(Dijkstra)算法过程 四.源码 一.应用场景-最 ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- 数据结构——最小生成树之prime算法(与最短路径之迪杰斯特拉算法很像)
最小生成树之prime算法 ***最小生成树:一个连通图的生成树中,所有边的权值加起来最小的生成树:称为最小生成树: [简介]:Prime算法可在加权连通图里搜索最小生成树.即:所有边的权值之和为最小 ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- Dijkstra迪杰斯特拉算法 C++实现
本篇文章主要介绍了Dijkstra迪杰斯特拉算法的C++实现,文章包含两个部分,在第一部分中我会简单介绍迪杰斯特拉算法以及一些个人的理解,第二部分会对C++代码的逻辑进行解释.下面是我已经上传的代码资 ...
最新文章
- 用Python来分析5天破10亿的哪吒,为啥这么火?
- 支付宝接口调用问题快速通道
- 进击的Android Hook 注入术《一》
- css 带轮廓的圆,CSS3 圆球轮廓动画
- Vue2.x—理解vuex核心概念action(使用到ES6的变量的解构赋值)
- GPU Gems1 - 19 基于图像的光照(Image-Based Lighting)
- 如何基于tomcat构建web站点
- 测试工作笔记001---web测试_工作经验_注意点_随时更新
- 联通BSS-ESS-CBSS系统安装相关
- 【写论文技巧】如何写一篇好论文?
- 多传感器融合定位技术
- Kata 在 Kubernetes 中的网络模型
- 50个好网站,从此上网不再虚度!
- java中的文件存储_File存储 - 文件存储
- ACP知识域四---团队绩效
- Windows 10 企业版许可证即将过期怎么办
- 面试前端的简历的注意事项
- JS实现最美的3D宇宙效果
- QDateTime相关格式
- 天猫精灵智能设备对接(8) 开发者网关地址