dijkstra算法
A*算法和dijkstra算法都是启发式搜索,dijkstra算法可以看成是广度优先搜索,而A*可以认为是深度优先搜索。
dijkstra就是保证当前节点的值对于前面的层一定是最优的(不管后面有啥只往前看),所以最后到终点的时候,可以保证终点到前一层选一个最优的点,这样从终点到起点一直选当前最小得到的路径一定是最优的。
A*可以轻松地用在比如无人机航路规划中,而dijkstra建立在较为抽象的图论层面。
A*算法主要是有两张表, 一个open表,一个是close表。
1. 将起点加入open表。
2. a)遍历open list,找F(F = G + H)值最小的节点,把他作为当前要操作的节点;
2. b)把这个节点移到close list;
2. c)把当前操作节点周围的8个节点放到open list中(除了不可达的节点,比如墙、禁飞区等);
2. d)重复上述操作,每次都去F值最小的节点作为当前操作节点。
3. 当终点加入到close表中的时候停止。
4. 保存路径,从终点开始,每个节点沿着父节点移动到起点,就是最终路径。
上面F = G + H中:H是启发函数,是当前点到终点距离的估计,一般采用曼哈顿距离(当前点和终点横纵坐标差之和);G就是起点到当前点的距离,这里G值的度量方式一般是上下左右取一个值比如10,对角线的四个点取一个值比如14(一般比上下左右的值要大),而在A*中表示障碍点一般会给对应点一个特别大的G值,所以在筛选的时候就会放掉
GIF图:https://blog.csdn.net/hopeping128/article/details/78960326
相关阅读
RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。 RSA算
https://www.lintcode.com/这个网站上面有一些关于算法的题,可以进行日常的练习。
问题描述Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。给出一列数{pi}={p0, p1, …, pn-1},用这列
模拟退火算法(SA)简单介绍,附用python3求解最大值案例
简介 模拟退火算法(Simulate Anneal,SA)是一种通用概率演算法,用来在一个大的搜寻空间内找寻命题的最优解。其思想借鉴于固体的退火
最开始学习编程,遇到排序问题,一般都是用冒泡法,因为冒泡法好理解,代码量少。但是这种算法时间复杂度高,当需要排序的元素较多时,程序运