迪杰斯特拉算法的步骤
1.两个集合S 和T集合
2.S里首先存储的是我们的源点,T是其他点
3.然后我们更新从原点到其他点的距离,并选出最小的值的终点为中转点(这里讲的不是很清楚,建议和数据里的例子一起看)(循环)
4.直到T集合没有元素为止,我们就可以得到源点到每一个点的最终距离
这里我们来谈谈为什么要选择最小的值的点作为中转点。
首先我特别喜欢有位博主写的
每一次(第3步骤的循环)就会出现一个源点到改点的最小路径(确实,非常正确)
首先我们谈谈第一次循环
假设5个点 a,b,c,d,e。
a到b为5
a到c为3
a到d为正无穷(因为无边直接连接)
a到e为正无穷
这里我们肯定要将c选出来作为我们的中转点。
同时
a到c的最短距离是3
why?
首先我说为什么不能通过a到某个点再通过某个点到c说不定距离会更短吗?
你先看看(a到b,d,e)的距离都大于a到c的距离
如果我通过他们中的任何一个点到达c,都会大于3
有人会说,a到e只是没有边相连,我如果通过某个点到到达c,说不定会更小呢?
你看看,我肯定要往a,e之间填一个值吧,你填什么?b?但这些都已经直接比3大了。
所以a到c的最小路径确定了3

第一次循环看不出来什么,存在很大的偶然性
所以我们再做一次循环(现在我们已经将c放到S集合中了)
结果是
a到e为6
a到b的距离是5
a到d的距离是正无穷
我们要把b拿出了
a到b的最小路径是5(又确定了)
why?
来我们继续重复上面的思路
你说a到b的最小路径可能小于5
那就是a(当然这里的a是一个整体(包含了中转点定位))
a到达某个点再到达b的距离要<5
你看看 e吗?
a到e的最小距离(暂时的)是6
你说可让这个距离小于6
确实(不否定)
也就是说
a到达某个点再通过某个点到达e可能<6
但你看看
a到达某个点(除b外)任何距离都是大于5的
不管你怎么往中间填,a到达b的距离都会大于5
所以得出a到达b的最短路径为5
依次类推
可得出
每次的a点到达某点的最短路径
最后
谈谈为什么迪杰斯特拉算法为什么不能有负权值
以上一个循环为例
a到达e再从e到b
a到e大于5了(所以我们判断,这个路径一定是大于5的)
那是因为我们默认了e到d一定是一个正值
一旦e到b为一个负值,那么5就可能不是一个最小路径
比如a到e是6>5了
但e到b是-10
直接<5了
结果就不再成立
所以迪杰斯特拉算法不能有负权值。

谈谈迪杰斯特拉算法的理解相关推荐

  1. 迪杰斯特拉算法通俗理解

    迪杰斯特拉算法 迪杰斯特拉算法是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题.主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩 ...

  2. 迪杰斯特拉算法——PAT 1003

    本文主要是将我对于我对于迪杰斯特拉算法的理解写出来,同时通过例题来希望能够加深对于算法的理解,其中有错误的地方希望大家指正. 迪杰斯特拉算法 我将这个算法理解成一个局部到整体的算法,这个方法确实越研究 ...

  3. 如何理解迪杰斯特拉算法

    路漫漫其修远兮,吾将上下而求索. --屈原 在最短路径的求解算法中,迪杰斯特拉(Dijkstra)算法应该是非常出名的,但是对于初学者而言却又很难理解为什么这个算法是对的,找到的就是最短路径.下面博主 ...

  4. 透彻理解迪杰斯特拉算法

    Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,这个算法我主动学了三遍,第一主动学的时候,是看严蔚敏的<数据结构>,当时应该是学懂了,有点透彻地理解了这个算法,但是没有记录下来 ...

  5. java迪杰斯特拉算法介绍_178-迪杰斯特拉(Dijkstra)算法基本介绍

    2.网上数据结构和算法的课程不少,但存在两个问题: 1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了 2) ...

  6. Dijkstra迪杰斯特拉算法 C++实现

    本篇文章主要介绍了Dijkstra迪杰斯特拉算法的C++实现,文章包含两个部分,在第一部分中我会简单介绍迪杰斯特拉算法以及一些个人的理解,第二部分会对C++代码的逻辑进行解释.下面是我已经上传的代码资 ...

  7. 【算法导论】第24章迪杰斯特拉算法

    1.问题引入 在带权有向图中求解某个源点到其余各个顶点的最短路径一般可以采用迪杰斯特拉算法(Dijkstra算法). 2.算法的主体思想: 引用:(http://hi.baidu.com/wangzi ...

  8. 求有向图中两点最短距离java_Java 迪杰斯特拉算法实现查找最短距离

    迪杰斯特拉算法 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是 ...

  9. Dijkstra(迪杰斯特拉)算法求单源最短路径问题

    Dijkstra(迪杰斯特拉)算法求单源最短路径问题 重要的事情说三遍:代码不是我写的!代码不是我写的!代码不是我写的! 第一个算法是严蔚敏数据结构(C语言版)上写的,第二个算法是王道数据结构上写的, ...

最新文章

  1. python通过指定网卡发包_Python 使用指定的网卡发送HTTP请求的实例
  2. 阿里云服务器中毒‘Kirito666’经历
  3. jmeter之关联操作
  4. js在类的方法中访问自己的属性
  5. 集散型计算机控制系统的缺点,什么是集散控制系统?有什么特点?
  6. 全国职称计算机吧,全国职称计算机考试Excel2003大纲
  7. java分形树_跪求javaSE高手 graphics绘图问题 本来是递归算法实现的分形树 现要求通过改变递归深度来实现树的生长...
  8. GIT回滚master分支到指定tag版本 并提交远程仓库
  9. mysql年龄数据类型_MySql 数据类型
  10. 数字电子技术之逻辑函数的化简及表示
  11. 医学界的动作捕捉系统(一)
  12. 南阳oj S + T
  13. matlab计算图像的曲率半径
  14. Master Plan for becoming a Software Architect : Roadmap of a Software Architect
  15. 几个免费的长链接缩短链接工具
  16. 计算机二级考试题库vb知识点,国家计算机二级考试题库 VB上机试题第13套
  17. 人脑是怎样认知图像的?——视觉计算理论(最新模式识别之一,Marr)
  18. (三)FTD整体策略结构说明
  19. 智汀教你如何用手机远程控制智能门锁
  20. 各linux桌面性能比较,七大顶级桌面比较!Linux平台自由选择

热门文章

  1. 机器学习15 -- Meta Learning 元学习
  2. Jquery实现全选和反选
  3. json-c arm移植
  4. 国密SM9算法C++实现之六:密钥封装解封算法
  5. 批量复制文件夹,不复制内容
  6. 浏览器伪装成linux,手把手教你修改Firefox的User-Agent伪装Android微信浏览器
  7. 地球正在变“秃”?数据告诉你真相
  8. 联想LJ2405激光打印机打印速度慢的解决方法
  9. 用Python写个自动批改作业系统
  10. ntt docomo 业务一览