Dijkstra算法和A*算法都是最短路径问题的常用算法,下面就对这两种算法的特点进行一下比较:

  1. Dijkstra算法计算源点到其他所有点的最短路径长度,A*关注点到点的最短路径(包括具体路径)。
  2. Dijkstra算法建立在较为抽象的图论层面,A*算法可以更轻松地用在诸如游戏地图寻路中。
  3. Dijkstra算法的实质是广度优先搜索,是一种发散式的搜索,所以空间复杂度和时间复杂度都比较高。对路径上的当前点,A*算法不但记录其到源点的代价,还计算当前点到目标点的期望代价,是一种启发式算法,也可以认为是一种深度优先的算法。
  4. 由第一点,当目标点很多时,A*算法会带入大量重复数据和复杂的估价函数,所以如果不要求获得具体路径而只比较路径长度时,Dijkstra算法会成为更好的选择。

启发函数的性质

那么能不能综合上面Dijkstra算法得到最优解和贪心算法速度快的特点,有更好的办法呢? 
【注意一下这个地方,Dijkstra算法是适用于任何图算法找最短距离均可的,但是用到启发式算法的话,大部分情况下会是一个方格图,因为只有方格图才能比较好的估算从当前点到终点的距离】 
那么我们可以先定义一个估算函数

f(n)=g(n)+h(n)

其中 g(n) 表示起点到当前点 n 实际走的代价, h(n) 表示当前点 n 到终点的估算代价。 
所以上面两个合起来就是其走当前点到终点的总代价函数 f(n)  
而 h(n) 这个估计函数不同的估计情况,结果也不会相同。

  1. 先考虑极端情况, 如果h(n)=0的情况下,只有g(n)起作用,那么A*算法就是Dijkstra算法。
  2. 如果h(n)始终小于等于实际n点到终点的距离,那么必然能够保证A*算法找的解就是最优解。而且h(n)越小,则A*扩展的节点也就越多,A*算法运行的也就越慢。
  3. 如果h(n)始终都等于实际n点到终点的距离,那么A*算法只会严格走从起点到终点的最短路径。虽然这种情况一般不可能发生,当然一些特殊情况下会发生【比如没有障碍物的情况】。
  4. 如果h(n)有时候大于实际n点到终点的距离,那么不能保证A*算法能够找到最短路径
  5. 另外一种极端情况,就是如果只有h(n)发挥作用,则A*算法就相当于贪心算法。

Dijkstra算法和A*算法总结相关推荐

  1. 最短路径Dijkstra算法和Floyd算法整理、

    转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径-Dijkstra算法和Floyd算法 Dijks ...

  2. 【Java数据结构与算法】第二十章 Dijkstra算法和Floyd算法

    第二十章 Dijkstra算法和Floyd算法 文章目录 第二十章 Dijkstra算法和Floyd算法 一.Dijkstra算法 1.介绍 2.代码实现 二.Floyd算法 1.介绍 2.代码实现 ...

  3. dijkstra算法和A*算法

    转自: https://www.cnblogs.com/21207-iHome/p/6048969.html#undefined Dijkstra算法 迪杰斯特拉(Dijkstra)算法是典型的最短路 ...

  4. Dijkstra算法和Floyed算法

    Dijkstra算法和Floyed算法 最短路径: 在非网图中,最短路径是指两顶点之间经历的边数最少的路径. 在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径. 最短路径问题: 单源点到其 ...

  5. 最短路径(Dijkstra算法和Floyd算法)

    最短路径 ​ 在图中,不可避免要解决的一个问题就是计算两点之间的最短路径,对于图结构来说,两个点之间不一定只有一条路径,那么如何才能找出最短的那一条就是图中最短路径问题.最短路径问题在实际生活中应用十 ...

  6. 最短路径—Dijkstra算法和Floyd算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  7. 最短路径:Dijkstra算法和Floyd算法

    一.Dijkstra算法(单个顶点到其他顶点的最短距离) 定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层 ...

  8. Dijkstra算法和Floyd算法详解(MATLAB代码)

    一.Dijkstra算法 1.算法简介 Dijkstra算法是由E.W.Dijkstra于1959年提出,又叫迪杰斯特拉算法,它应用了贪心算法模式,是目前公认的最好的求解最短路径的方法.算法解决的是有 ...

  9. dijkstra算法和floyd算法(C语言)

    dijkstra算法: /* 邻接表存储 - 无权图的单源最短路算法 *//* dist[]和path[]全部初始化为-1 */ void Unweighted ( LGraph Graph, int ...

最新文章

  1. 受用一生的高效 PyCharm 使用技巧(一)
  2. Mysql5.6-DDL是否加锁
  3. JPA EnableJpaAuditing 审计功能
  4. PCA 主成分分析 用Excel一步步演算过程详解
  5. java interfaceof,java interface教程
  6. Linux服务器安装svn
  7. Mono 之 单元测试
  8. Hadoop配置文件详解
  9. 商业计划书(BP)应该包含哪些点?看 BP 的人最想从中得到什么?
  10. 深度学习:Nvidia显卡驱动安装
  11. 近期购书体验:当当相对最棒,卓越蜗牛,京东缺货
  12. 用python做网站的步骤_Python建网站的步骤
  13. 千年虫与2038年问题
  14. 方格网的填方和挖方计算
  15. iOS Bug---CoreLocation 部分机型卡界面
  16. java -version 自动被切换的问题 : C:\ProgramData\Oracle\Java\javapath;
  17. Python3寻找相同图片
  18. vbs和java有关系吗_Java程序员所需的批处理和VBS脚本 (转载)
  19. Druid连接池实现数据库加密
  20. c语言16进制转换成文本显示,文本如何转换成16进制字节集数据

热门文章

  1. 蓝牙版本应该如何选择
  2. ubuntu20.04安装到u盘+配置美化
  3. 最近火爆的外卖分销小程序搭建及推广秘籍
  4. Deinterlacer(影像解交错)概念与解析
  5. 【100%通过率】华为OD机试真题 C++ 实现【简单的自动曝光】【2022.11 Q4 新题】
  6. charles问题,chls.pro/ssl 证书无法在小米手机下载 ?(最详细的解决方案,其他手机也可以适用)
  7. AtCoder Regular Contest 105 C - Camels and Bridge
  8. Git 04 ---用Idea合并git分支
  9. Autodesk Inventor: Presentations Autodesk Inventor 教程之Presentations Lynda课程中文字幕
  10. oracle设置session空闲时间超时断开