美文网首页程序员技术栈
算法: 聪明的 A* 算法

算法: 聪明的 A* 算法

作者: 写代码的海怪 | 来源:发表于2019-02-16 01:22 被阅读22次

问题

当说到求最短路径我们可能首先想到的是用 Dijkstra 算法去做,而使用 Dijkstra 算法基本是以开始节点往外扩散,直到找到终点的。如下图,从开始节点开始扩散就会以同心圆那样扩散,左右的扩散速度是一样。

但是很明显终点在右边呀,我们能不能让 Dijkstra 稍微往右去扩散找呢?即优先找右边那两个点呢?这就是 A* 算法的由来了。

A* 算法思想

既然要优先找右边两个,那就要用到优先级了。A* 算法在访问每个节点时会给每个节点设置优先级,叫作 f 值。即选择哪个节点作为下一个节点会参考 f 值。f 值有以下公式

f = g + h

  • g 值:开始节点到当前节点的距离
  • h 值:当前节点到终点节点的估算距离,为什么叫估算呢?要是你知道那不就不用去求最短路径了嘛,这个估算值有很多种算法去估,这里就假设你都知道这个估算值了

关键的步骤来了,首先会检测当前节点里相邻的节点,并选择 f 值最小的节点,把它作为当前要处理的节点。然后动态规划方程判断和更新最短路径。

if (dist[v] > didst[u] + length(u -> v)):
    dist[v] = dist[v] + length(u -> v)
    pred[v] = u

后面就一直重复选节点和更新路径了。

总结

A* 算法其实就是 Dijkstra 加了一个优先级,在图论里可能使用十分简单,就是判断优先级就完了。但是在方格布局(如下图)就有点麻烦了。

具体请参考 A星算法详解(个人认为最详细,最通俗易懂的一个版本)

相关文章

  • 算法: 聪明的 A* 算法

    问题 当说到求最短路径我们可能首先想到的是用 Dijkstra 算法去做,而使用 Dijkstra 算法基本是以开...

  • 算法学习的必要性

    Time: 2019-08-06 为什么考察算法? 算法可以看出候选者够不够聪明 实现算法问题,可以控制时间 算法...

  • 放弃人算 接受天算 归命佛算

    人算 · 天算 · 佛算. 人有人的算法,天有天的算法,佛有佛的算法。 人打聪明的算盘,天打因果的算盘,佛打慈悲的...

  • 闭环

    闭环 ——《人生算法》第一部分人生算法九段 1、文章摘要 聪明人最大的自我陷阱是聪明会成为前行的障碍。在做一件事情...

  • 匈牙利算法

    算法思想 算法流程 算法步骤 算法实现 python 算法应用

  • 机器学习算法

    机器学习的算法分监督算法和无监督 算法。监督算法包括回归算法,神经网络,SVM;无监督算法包括聚类算法,降维算法。...

  • 垃圾回收算法有几种类型? 他们对应的优缺点又是什么?

    常见的垃圾回收算法有: 标记-清除算法、复制算法、标记-整理算法、分代收集算法 标记-清除算法 标记—清除算法包括...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 人生算法(一)

    001 定义算法 算法就是解决某个问题的计算方法和可重复的实实施步骤 002 完成大于完美 我们身边有很多聪明人,...

  • 关于一些算法

    我们平常说的算法按照使用方向加密算法,排序算法,搜索算法,优化算法,音视频处理算法,图片处理算法 1.加密解密算法...

网友评论

    本文标题:算法: 聪明的 A* 算法

    本文链接:https://www.haomeiwen.com/subject/dagwsqtx.html