最短路径算法--A*算法实现

最短路径算法--A*算法实现

定义

A*算法是最短路径算法中的一种启发式算法。

去看原文

算法介绍

A*算法是一个目标导向的算法。为什么这么说了,这是因为A*在Dijkstra算法的基础上利用了一个启发式函数,该函数被定义为某个节点到目标点的距离(欧式距离、曼哈顿距离等),可以表示为h(u,t),其中u是任意一个节点,t是目标点,所以A*算法的每个节点的优先值为f(u)=dist(s,u)+h(u,t)。这个启发式函数的作用就是能够让那些靠近目标点的节点先被访问到,从而驱动搜索方向朝目标点方向推进。就是这个小小的改进就可以让算法的效率有一定提升。

它的搜索空间是这样的:
在这里插入图片描述

算法原理

A*算法的基本步骤和Dijkstra算法是一样的,也需要一个优先队列,唯一不一样的便是这个启发值,当你把启发值设为0时,也就是Dijkstra算法。

实验对比

测试部分比较了单向Dijkstra算法、双向Dijkstra算法以及A*算法的效率。随机从武汉路网中取了100对OD,分别记录每对OD最短路径计算的运行时间以及扩展节点数量。

去看对比实验

从图中,我们可以很清楚的看到A*的运行时间还是要优于Dijkstra算法的,搜索空间A*算法也是比Dijkstra算法要小。

更多精彩内容,请关注“探索GIS的小蜗牛”。如需源码,请后台留言。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值