图文解析A*搜索算法

A*算法是启发式搜索算法,是根据Dijkstra算法改进而来。

一、定义:是一种在图形平面上,对于有多个节点的路径求出最低通过成本的算法。它属于图遍历和最佳优先搜索算法,亦是BFS的改进。

二、如何更好的理解A*算法?

如下图所示,S为起始(start)节点,G为目标(goal)节点。

(1)节点之间连线是两点的路径长度,如A到E的路径长度c(A,E)=9。

(2)节点旁的h值时当前节点到达目标节点(G)的预估值,如h(A)=15,表示从当前点A到达目标点G的估计路径长度为15,此处h(x)即为启发函数。

(3)从起点S到达当前节点x的路径长度表示为g(x)。

(4)从起点S到达目标G并经过点x的估计距离长度表示为f(x)=g(x)+h(x),该公式是A*算法的核心公式。

(5)A*算法通过不断的选择估计距离f最小的节点,逐渐构建最短路径。

逻辑流程

创建两个集合OPEN集,CLOSED集,算法核心是从OPEN集中选择最优(f值小最优,或f相同时,h小的更优)的节点到CLOSED集中,然后将其后继节点放入OPEN集中,然后重复操作选取最优节点,直到到达目标,或者OPEN为空为止。最后再CLOSED集中根据目标G所包含的前序节点逆序查找最后到达起点S,这个链路的逆序即最优路径,具体流程如下图。

搜索过程

以下是前面网络的搜索过程展开图。

组合块中:

(a)灰色为前序节点

(b)蓝色当前节点x

(c)g:起点S到当前节点x的路径距离。

(d)h:当前节点x到终点G的估计距离

(e)f:起点S途径x到达终点G的估计距离,即f=g+h

(f)绿色框为当前OPEN集合中的最优节点

(g)红色框表示当前OPEN集合中需要被删除的节点

在OPEN、CLOSED中每一行表示一次完整迭代完成时两集合中的节点集合。

最后的最优路径是:S->B->F->k->G

注:当两个节点f相同时,h小的更优

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

THE END
1.最短路径A*算法原理及java代码实现(看不懂是我的失败)算法只要懂原理了,代码都是小问题,先看下面理论,尤其是红色标注的(要源码请留下邮箱,有测试用例,直接运行即可) A*算法 百度上的解释: A*[1](A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法。 公式表示为: f(n)=g(n)+h(n), https://blog.csdn.net/h348592532/article/details/44421753
2.Java编程实现A*算法完整代码java这篇文章主要介绍了Java编程实现A*算法完整代码,简单介绍了a星算法,然后分享了完整测试代码,具有一定借鉴价值,需要的朋友可以参考下。前言 A*搜寻算法俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中 通过二维数组构建的一个迷宫,“%”表示墙壁,A为起点,B为终点,“#https://www.jb51.net/article/129284.htm
3.启发式搜索AStar算法附代码A*算法是对Best-First算法的一种改进,核心思想是广搜,利用open表和close表对节点进行剪枝,同时利用启发式测度来选择最优的扩展节点。 A*算法在满足一定条件下找到的解必然是最优解。 最短路得到最优解条件:A*算法的启发式函数h如果小于等于真实值n的话,那么算法是能得到最优解的,若h大于等于真实值n,那么就不https://www.jianshu.com/p/5704e67f40aa
4.基于向量矩阵的Apriori改进算法研究摘要: 针对传统的关联分析算法Apriori执行效率低、I/O过重、计算量过大等问题,提出了一种通过减少扫描数据库次数来降低候选项集计算复杂度, 在频繁项集求解过程中通过将事务项集转换为行向量,利用“与”操作来提高算法执行效率的Apriori改进算法。利用学生在校行为数据集对Apriori改进算法进行有效性和高效性验证。https://jns.usst.edu.cn/html/2022/1/20220109.htm
5.Apriori算法如何用代码实现mb64ca025376906的技术博客Apriori算法如何用代码实现 Apriori算法是一种用于频繁项集挖掘的算法,通常用于市场篮子分析等场景,用于发现不同商品之间的关联规则。以下是使用Python实现Apriori算法的示例: from itertools import combinations # 定义函数用于生成候选项集 def generate_candidates(itemsets, k):https://blog.51cto.com/u_16213142/7073018
6.基于时空A*算法的多AGV无冲突路径规划从这一角度出发, 本文首先根据物流分拣中心的场地特点选择合适的地图建模方法, 然后将时间维度导入A*算法, 将其改进为时空A*算法, 并将时空A*算法作为基于冲突搜索框架的下层规划器, 用于求解多AGV无冲突路径规划问题. 对上述两种算法的融合, 旨在优势互补为解决路径规划中的冲突问题提供新的求解思路. 最后, 通过仿https://c-s-a.org.cn/html/2022/4/8454.htm
7.实测A*寻路与JPS寻路同一地图运行效率腾讯云开发者社区前面几篇我们把A*算法和JPS的算法都简单介绍了一下,并且展现出来了行动规划,其中A*算法的核心代码我也在《实战|OpenCV结合A*算法实现简单的运动路径规划》中放出来了, 感兴趣的朋友可以连接过去看一下,今天我们就专门对两个算法的运算效果进行一下实测,对比一下看看 https://cloud.tencent.com/developer/article/1621022