算法学习-A*算法

虽然大二就接触过A*算法,但实际上根本没去实现过,所以很快就忘了。。做题基本都是Dijkstra。现在在上AI课,要写A*的作业,所以复习(重学)一遍,做一点笔记。

常见的搜索有DFS和BFS,当然还有大名鼎鼎的Dijkstra,以及加速的最佳优先搜索算法。下面介绍Dijkstra、Best First、A*算法的区别

Dijkstra算法在寻找下个点时,选择标准为:【open列表中,距离起点最近的点。即:起点到该点的距离最短】

最佳优先搜索算法在寻找下个点时,选择标准为:【open列表中,距离终点最近的点。即:终点到该点的距离最短】

A*算法在寻找下个点时,选择标准为:【open列表中,起点到该点的距离 + 该点到终点的直线距离 最短。】

Dijkstra 算法保证最终路径是最短的,但比较慢;最佳优先算法比较快,但有障碍物时,不一定保证路径是最短的。

A*算法集合了两种算法的特点,通过新的函数来计算每个节点的优先级: f ( n ) = g ( n ) + h ( n ) f(n)=g(n)+h(n) f(n)=g(n)+h(n)
其中

  • f ( n ) f(n) f(n)是综合优先级;
  • g ( n ) g(n) g(n)是节点 n n n离起的代价;
  • h ( n ) h(n) h(n)是节点 n n n离终点的预计代价;
  • f ( n ) f(n) f(n)值越大,优先级越低。

启发函数 h ( n ) h(n) h(n)会影响A*算法的performance。

  • h ( n ) = 0 h(n)=0 h(n)=0恒成立时,就退化为了Dijkstra算法
  • h ( n ) h(n) h(n)始终小于等于节点 n n n到终点的代价,那么A*算法能保证找到最短路径。并且 h ( n ) h(n) h(n)估计得越接近真实代价,算法速度越快
  • h ( n ) h(n) h(n)大于等于节点 n n n到终点的代价时,A*算法虽然很快,但无法找到最短路径。此时有些接近Best First算法。

参考:

  • https://zhuanlan.zhihu.com/p/54510444
  • https://zhuanlan.zhihu.com/p/108344917
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值