zoukankan      html  css  js  c++  java
  • A* 暂时想法

      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'使用。

      

  • 相关阅读:
    uoj388 【UNR #3】配对树
    uoj386 【UNR #3】鸽子固定器
    回忆录
    xcode 把项目代码提交到远程SVN服务器
    IOS 点击按钮拨号
    ADO与达梦7产生的一个未知问题
    DSN 建立达梦7(DM)连接
    iOS UIControl 事件的说明(转)
    IOS开发copy,nonatomic, retain,weak,strong用法
    QT Creator 使用SVN的版本号做为编译的版本信息
  • 原文地址:https://www.cnblogs.com/yoru/p/4194347.html
Copyright © 2011-2022 走看看