A*算法入门
来源:互联网 发布:全景漫游制作软件 编辑:程序博客网 时间:2024/06/14 04:56
http://www.cppblog.com/mythit/archive/2009/04/19/80492.aspx 收藏一下
在看下面这篇文章之前,先介绍几个理论知识,有助于理解A*算法。
启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提到了效率。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。
估价函数:从当前节点移动到目标节点的预估费用;这个估计就是启发式的。在寻路问题和迷宫问题中,我们通常用曼哈顿(manhattan)估价函数(下文有介绍)预估费用。
A*算法与BFS:可以这样说,BFS是A*算法的一个特例。对于一个BFS算法,从当前节点扩展出来的每一个节点(如果没有被访问过的话)都要放进队列进行进一步扩展。也就是说BFS的估计函数h永远等于0,没有一点启发式的信息,可以认为BFS是“最烂的”A*算法。
选取最小估价:如果学过数据结构的话,应该可以知道,对于每次都要选取最小估价的节点,应该用到最小优先级队列(也叫最小二叉堆)。在C++的STL里有现成的数据结构priority_queue,可以直接使用。当然不要忘了重载自定义节点的比较操作符。
A*算法的特点:A*算法在理论上是时间最优的,但是也有缺点:它的空间增长是指数级别的。
IDA*算法:这种算法被称为迭代加深A*算法,可以有效的解决A*空间增长带来的问题,甚至可以不用到优先级队列。如果要知道详细:google一下。
A*寻路初探(转载)
作者:Patrick Lester
译者:Panic2005年
译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念。这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为学习人工智能的开始。
这篇文章非常知名,国内应该有不少人翻译过它,我没有查找,觉得翻译本身也是对自身英文水平的锻炼。经过努力,终于完成了文档,也明白的A*算法的原理。毫无疑问,作者用形象的描述,简洁诙谐的语言由浅入深的讲述了这一神奇的算法,相信每个读过的人都会对此有所认识(如果没有,那就是偶的翻译太差了--b)。
现在是年月日的版本,应原作者要求,对文中的某些算法细节做了修改。
原文链接:http://www.gamedev.net/reference/articles/article2003.asp
原作者文章链接:http://www.policyalmanac.org/games/aStarTutorial.htm
更多 内容请点击这里看原文
理解A*寻路算法具体过程
http://www.cnblogs.com/technology/archive/2011/05/26/2058842.html
- A*算法入门
- A*算法入门
- A*算法入门
- A*算法入门(转)
- A*算法入门
- A*算法入门
- A* 算法入门
- A*算法入门
- A*算法入门
- A*算法入门
- A*算法入门
- A*算法入门
- A*算法入门
- A*算法入门
- A*算法入门
- A*算法入门
- A*算法入门
- A*算法入门
- IE6下遮罩层不支持width:100%解决技巧
- ubuntu下开机启动挂载SWAP
- ecshop与jquery冲突解决之最简单办法
- PHP json_encode中文乱码解决方法
- CentOS 6.X Denyhosts配置
- A*算法入门
- 在线PHP解密(威盾)工具
- editplus配置笔记(新建文件模板、代码美化、PHP手册、函数自动完成)
- FCK编辑器空白,报错:FCKConfig is not defined, FCKBrowserInfo is not defined解决方法
- 交叉编译tslib1.4过程详述,配合QT4.5.3成功在Mini2440运行成功
- ECSHOP 后台商家设置增加设置选项
- php header 无法跳转的问题
- ext3文件系统恢复被删文件
- CodeIgniter-3.0.0 Unable to locate the specified class: Session.php