码迷,mamicode.com
首页 > 其他好文 > 详细

A* 暂时想法

时间:2014-12-30 20:39:41      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

  A*=BFS+排序

  目前看的关于A*的想法正如上面所表示的,首先谈下BFS,BFS的话任何一本数据结构书上总该会提到了吧。BFS是从一个点出发然后层层的展开,然后就会得到一个由起始点到目的点最近的路径。A*首先还是基于这个想法的,但是同时改进。

  先复习下BFS,对于BFS是从一个点开始展开然后遍历。我们可以把遍历的结果看成是一颗树的层次遍历,对于每一层就是BFS在每个一定的步长的条件下能走到的节点。从这里来想关于树的遍历,从根节点出发遍历该节点的孩子节点。然后来看,A*的重心:对于孩子能够走到的节点进行排序,优先走对于目标更优的节点

  与BFS不同的是,在接下来的处理中,A*对于新加入的节点是一视同仁的,不会有先加入和后加入的区别,但是对于所有的节点要考虑的是该节点对于到达目标来说是否更优

  我理解的A*:

  技术分享

  1.从遍历中取出当前花费最优的元素

  2.将直接能访问到的节点放入遍历中,这步与BFS类似,遍历当前节点的周围的元素

    ①如果发现周围的元素T已经在遍历中的集合中,那么就考虑如果通过当前节点会不会使得达到T的花费更小,如果更小则更新更小的费用

    ②如果发现周围的元素T在未遍历的集合中,那么就将元素T放入到遍历中的集合中

    ③如果发现周围的元素T在已遍历的集合中,那么就不考虑元素T

  3.将这个最优元素放入已遍历的集合中,重复上述过程直到找到目标或者遍历结束

  

  对于A*中的花费的定义,f=g+h

  f:总的花费

  g:到达这个点的花费,可以认为是步数、层数、路径上的阻碍等等……

  h:对当前节点到达目标节点的花费的预计,可以粗略的预计,比如:曼哈顿距离,或者是自己定义的耗费。但是h<=h‘,h‘是什么?h‘就是实际的耗费,但是实际的耗费谁知道呢……可能h‘很复杂,但是我们可以自己定义个简单的h来代替h‘使用。

  

A* 暂时想法

标签:

原文地址:http://www.cnblogs.com/yoru/p/4194347.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!