Dijkstra's Algorithm (戴克斯特拉算法)

是由荷兰计算机科学家 Edsger Wybe Dijkstra( 戴克斯特拉 )在1956年设计的算法。

这个算法用于依次找出距离指定点最近的点,先找出最近的点,再找出第二近的点,直到找完所有的点。

其方法是先以指定点的所有相邻点为候选点,找出最近的点,然后将这个最近点的所有相邻点加入到候选点中,再次进行所有候选大PK,这样就可以找到第二近的点,不断这样循环处理,就将所有的点按照距离指定点的距离依次排列出来了。而这样得到的路径也就是从指定点到各个点的最短路径,因为已是最短,没有更短了。

如何证明这一算法的正确性呢?

首先将所有点按照指定点的相邻点分类,也就是说,所有通过某个相邻点通往指定点的点集为一类,这一类点集就由这个相邻点为入口、为统领、为必经之路,因为是必经之路,所以每一类点中距离指定点最近的距离必然是相邻点本身,因此,距离指定点最近的相邻点就是离指定点最近的点。

接下来证明第二近点,除了之前选剩的相邻点,还要再加上最近点的相邻点,它们一起形成第二近点的候选名单,为什么呢?同样可以按照上面的分类原理来证明,这些新增候选点分散接手了第一近点的旧部,成为新的通往指定点的入口点,是那些旧部通往指定点的必经之路,因此计算这些候选点距离指定点的最小距离,就得到了第二近的点。

剩下的就是同理了,这样就依次找到了距离指定点最近的点,且它们就是到各点到指定点的最短路径。

如何找到一个点到另一个点的最短路径?

上述Dijkstra's Algorithm (戴克斯特拉算法)可以找到一个点到另一个点的最短路径,问题是比较耗时,因为它在找的过程中是自我中心主义,丝毫没有顾及要找的是到另一个指定点的距离,那有没有更快速的算法可以找到从一个点到另一个点的最短路径呢?

沿袭之前算法的思路,找最短路径的关键是如何选拔候选点,从起点出发,起点的相邻点肯定都是候选点,如何新增候选点就是关键问题,新增候选点的算法不能再用之前的与起点距离最短的算法,而是要照顾到与终点的距离,如何计算与终点的距离?如果只是单纯的Weighted Graph,那是无解的,但现实中,每个点通常都有固定的位置坐标,因此可以用它们的位置坐标来计算点与点之间的距离,这样,我们选择每个候选点(与起点的实际最短距离 + 与终点的坐标距离)来作为扩展新的候选点的指标,任何一个候选点竞标成功,就将它的所有相邻点晋升为新的候选点,而自己就可以功成身退了,因为它的所有相邻点都将在路径中携带它来参与后续的竞标。在竞标过程中,我们没有损失任何一个可能产生最短路径的候选点,只是不断增加赢面最大的新的候选点,而最终能夺取王冠明珠的是实际到达终点距离最小的候选点。这个算法叫A*算法。

Weighted Graphs最短路径算法理解相关推荐

  1. 关于最短路径算法的理解

    "最短路径算法:Dijkstra算法,Bellman-Ford算法,Floyd算法和SPFA算法等.​从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路 ...

  2. 【图论算法】最短路径算法(无权最短路径、Dijkstra算法、带负边值的图、无圈图)

    本篇博客将考察各种最短路径问题.     无权最短路径     Dijkstra 算法     具有负边值的图     无圈图     所有顶点对间的最短路径     最短路径的例子–词梯游戏 输入是 ...

  3. 最短路径算法——Dijkstra and Floyd算法

    一.     前言:     这个古老的算法应该耳熟能详了吧,但是我自从从学校出来到现在,最短路径算法都没有实际运用过,最近在一个GIS项目中总算用到了,于是乎把教材重温了下,同时查阅了网上很多的资料 ...

  4. 短小精悍的多源最短路径算法—Floyd算法

    前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径. 在单源正权值最短路径,我们会用Dijkstra ...

  5. 最短路径算法(一) Dijkstra算法(贪心算法)

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

  6. 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较

        几大最短路径算法比较 转自:http://blog.csdn.net/v_july_v/article/details/6181485 几个最短路径算法的比较: Floyd        求多 ...

  7. Python小白的数学建模课-17.条件最短路径算法

    条件最短路径问题,指带有约束条件.限制条件的最短路径问题.例如: 顶点约束,包括必经点或禁止点的限制: 边的约束,包括必经路段.禁行路段和单向路段:无权路径长度的限制,如要求经过几步或不超过几步到达终 ...

  8. Weighted Slope One 算法

    协同过滤方法是推荐系统采用的主要技术之一,这篇文章将要介绍此类方法中中的Weighted Slope One算法. Slope算法的核心思想来自线性回归分析.在线性回归分析中,给定一个训练集S={&l ...

  9. (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍

    这一篇博客以一些OJ上的题目为载体.整理一下最短路径算法.会陆续的更新... 一.多源最短路算法--floyd算法 floyd算法主要用于求随意两点间的最短路径.也成最短最短路径问题. 核心代码: / ...

  10. AGV导航中的最短路径算法比较

    在AGV导航中,路径选择是一个重要课题,如果最优路径使用最短路径算法,那可以使用的算法有很多,本文比较了当前流行的最短路径算法,主要有Dijkstra 算法,Floyd算法,A-star算法,Bell ...

最新文章

  1. python下载安装教程2.7-Python2.7.6下载
  2. java redis 主从配置_Redis实现主从复制(MasterSlave)
  3. [综合面试] 大牛的面试神级总结之总结篇
  4. django orm级联_django+jquery 实现级联选择菜单
  5. SAP CRM呼叫中心和社交媒体集成的所有BC set实现列表
  6. centos 配置subversion svn
  7. UML Use Case之间的各种关系
  8. 2-机器学习入门-读书笔记
  9. 主机overlay和网络overlay_边缘计算中kubernetes网络能大一统吗?
  10. 计算机组成之总线结构
  11. C语言基础程序题及答案(适合学完C基础的人练练手)
  12. 程序员新入手MacStudio的装机环境
  13. Vue项目实战之电商后台管理系统(三) 用户管理模块
  14. 面向对象:兜兜转转了很久,希望你恰好也在
  15. [ArcGIS] Python计算Geometrical interval自然间断点 | jenkspy库
  16. android fastboot原理,Android 手机进入不了fastboot模式的解决方案
  17. 桌面终端运维常见问题
  18. java DES-CBC加解密
  19. 我可以借助计算机在家里工作翻译,请帮我翻译下面句子
  20. [SV]SystemVerilog 断言(SVA)检查器库(OVL)

热门文章

  1. NMOS和PMOS管
  2. AcWing 292 炮兵阵地
  3. 浪潮服务器硬盘阵列怎么做,浪潮智能RAID技术为数据存储保驾护航
  4. 国内好用的邮箱评选,电子邮箱大全有你的吗?
  5. 美食杰-菜谱大全(二)
  6. CF赛后总结3:2021-07-22晚 HSSC21-22 div1+2 rating+219
  7. 治疗长期失眠的最好食物,不可错过!
  8. 为知笔记保存为html,为知笔记 | 如何保存微信内容到为知笔记?
  9. 为知笔记的快捷键整理
  10. 医学图像处理常用的看图软件介绍及使用(RadiAnt DICOM Viewer、ITK-Snap和3D Slicer)