关于A*算法求解最短路径问题的一些知识
2011-02-17 17:14
363 查看
A* 算法实际是一种启发式搜索, 所谓启发式搜索,就是利用一个估价函数评估每次的的决策的价值, 决定先尝试哪一种方案. 这样可以极大的优化普通的广度优先搜索. 一般来说, 从出发点(A)到目的地(B)的最短距离是固定的,我们可以写一个函数 judge() 估计 A 到 B 的最短距离, 如果程序已经尝试着从出发点(A) 沿着某条路线移动到了 C 点, 那么我们认为这个方案的 A B 间的估计距离为 A 到 C 实际已经行走了的距离 H 加上用 judge() 估计出的 C 到 B 的距离. 如此, 无论我们的程序搜索展开到哪一步, 都会算出一个评估值, 每一次决策后, 将评估值和等待处理的方案一起排序, 然后挑出待处理的各个方案中最有可能是最短路线的一部分的方案展开到下一步, 一直循环到对象移动到目的地, 或所有方案都尝试过却没有找到一条通向目的地的路径则结束.
怎么写这个算法中的估价函数非常的重要,如何保证一定能找到最短路径呢? 充要条件是, 你的估价函数算出的两点间的距离必须小于等于实际距离. 这个可以从数学上严格证明,有兴趣可以自己去查阅相关资料. 如果你的估价函数不满足这点, 就只能叫做 A 算法, 并不能保证最后的结果是最优的,但它可能速度非常的快. 而游戏中我们也不一定非要得到最优解的. 但无疑, 满足那个条件的 A* 算法中, 估计值越接近真实值的估价函数就做的越好, 下面给出的程序,我只使用了一个相当简单的估价函数: 求出两点中,若无障碍物的情况下的最短路径. 如果您想写出快速的寻路算法, 请自己寻找好的估价函数吧,有时间的时候,我会对此另文叙述 。
怎么写这个算法中的估价函数非常的重要,如何保证一定能找到最短路径呢? 充要条件是, 你的估价函数算出的两点间的距离必须小于等于实际距离. 这个可以从数学上严格证明,有兴趣可以自己去查阅相关资料. 如果你的估价函数不满足这点, 就只能叫做 A 算法, 并不能保证最后的结果是最优的,但它可能速度非常的快. 而游戏中我们也不一定非要得到最优解的. 但无疑, 满足那个条件的 A* 算法中, 估计值越接近真实值的估价函数就做的越好, 下面给出的程序,我只使用了一个相当简单的估价函数: 求出两点中,若无障碍物的情况下的最短路径. 如果您想写出快速的寻路算法, 请自己寻找好的估价函数吧,有时间的时候,我会对此另文叙述 。
相关文章推荐
- 关于栈与递归求解迷宫与迷宫最短路径问题
- 最短路径实现代码-->Dijkstra求解最短路径问题
- 邀请讨论“一种跳数约束的最短路径问题求解与分析”
- 贪心法求解单源最短路径问题
- Python基于Floyd算法求解最短路径距离问题实例详解
- BFS,Dijkstra,Floyd,DP求解最短路径问题
- 关于Gridview的一些知识和问题
- 关于Floyd最短路径的path图的生成问题
- 关于quartus软件安装的一些方法和路径问题总结
- [数据结构]求解迷宫最短路径问题
- 关于地震建立通信网(即最短路径)的问题
- Python使用Dijkstra算法实现求解图中最短路径距离问题详解
- 求解迷宫问题的所有路径及最短路径程序
- 迷宫最短路径问题(ShortestPath)的求解——利用链式队列
- 有向无权图最短路径问题——BFS求解
- [图论]Bellman-Ford算法求解最短路径问题(含有负权重)
- 对于 前K短路径问题 和 A*算法 的一些小小总结
- 第十二周项目四----利用遍历思想求解图问题之6最短路径
- 队列应用2:求解迷宫问题,最短路径
- 关于最短源路径问题