百科问答小站 logo
百科问答小站 font logo



A*寻路是一种广度优先搜索? 第1页

  

user avatar   zhai-sen-8 网友的相关建议: 
      

假如说待遍历的图是一棵二叉树的话,那么:

  • dfs是先序遍历
  • bfs是层次遍历
  • A*的遍历有点特别。它是给所有节点赋予权重(就是h(n)=f(n)+g(n))。从根节点开始,扩展所有子节点,加入到优先队列中。然后把根节点抛掉,在优先队列中找权重最小(或最大)的节点将其扩展,把它所有子节点加入优先队列中并抛弃该节点。以此类推。

因此A*的遍历模式跟dfs与bfs都不太一样。与bfs的相同点在于每次都扩展某个节点的所有子节点。不同的地方在于bfs扩展顺序固定且与权重无关,而A*的扩展顺序由权重决定。

随便举个例子。(下图是分支限界法解01背包问题的图,不是A*,你就把b看作是A*中的代价函数h(n)=f(n)+g(n)好了。这个图就做个示意。)

每种方法遍历的次序分别为:

  • dfs:ABDFGHIECJLNOPQMK
  • bfs:ABCDEJKFGLMHINOPQ
  • A*:ABCDEFGHIJKLMNOPQ

所以用到的数据结构也不一样

  • dfs->栈
  • bfs->队列
  • A*->优先队列

此外,题中“A*接近最优解”的说法不太好。A*一定是最优解。不是最优解的叫A。




  

相关话题

  如何看待快手 CEO 宿华发文称,将用正确的价值观指导算法? 
  AlphaGo 能战胜李世石吗? 
  如何评价 DeepMind 在星际中的失利,以及 OpenAI 在 Dota 上的成功? 
  计算复杂性理论是否具有足够的现实意义,如今有哪些比较「现实」的应用? 
  数据结构与算法在工作的作用及其大学学到什么程度才算可以? 
  非计算机专业,想刷leetcode,请问在此之前需要做什么准备? 
  既然使用神经网络也可以解决分类问题,那SVM、决策树这些算法还有什么意义呢? 
  游戏建模师会在未来被ai淘汰吗? 
  面试题:一个长度为n的数组,其中数组中每个元素的值都不大于n,如何用O(n)的算法判断数组中是否存在重复元素? 
  目标检测算法中Two-stage算法速度慢,到底在哪里? 

前一个讨论
伽罗瓦理论究竟讲了什么?为什么其中用到了群论的知识?
下一个讨论
如何证明下列公式的通项公式呢?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利