A* 搜索算法——图形搜索算法:从给定起点到给定终点计算出路径。其中使用了一种启发式的估算,为每个节点估算通过该节点的最佳路径,并以之为各个地点排定次序。算法以得到的次序访问这些节点。因此,A*搜索算法是最佳优先搜索的范例。

该算法综合了最良优先搜索和Dijkstra算法的优点:在进行启发式搜索提高算法的效率的同时,可以保证找到一条最优路径。

在此算法中,如果以g(n)表示从起点到当前顶点n的实际距离,h(n)表示 当前顶点n到目标顶点的估算距离,那么A*算法的估算函数为:f(n) = g(n) + h(n);f(n)代表了该节点的综合预估值,值越小,到达目标的成本就越小,所以访问的时候尽量优先考虑最小的。h(n)值可以采用欧几里得距离、曼哈顿距离、切比雪夫距离等公式计算而来。

1.欧几里得距离:指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。

2.曼哈顿距离:两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离,因此,曼哈顿距离又称为出租车距离。

3.切比雪夫距离:是向量空间中的一种度量,二个点之间的距离定义是其各坐标数值差绝对值的最大值。以(x1,y1)和(x2,y2)二点为例,其切比雪夫距离为max(|x2-x1|,|y2-y1|)。

A*搜索算法的步骤:

a.初始时,S只包含源点,即S = {vs},vs的距离为0。U包含除vs外的其他顶点,即U={其余顶点},若u不是vs的出边零接点,则<u,vs>权值为∞;

b.从U中选取一个距离vs最小的顶点k,把k加入S中(该选定的距离就是vs到k的最短路径长度min);

c.以k为新考虑的中间点,修改U中各顶点的距离;若从源点vs到顶点u的距离(经过顶点k)比原来的距离(不经过顶点k)短,则修改顶点u的距离值,即dist[u] = min(dist[u],min + w[k][u]);

d.重复步骤b和c知直到所有顶点都包含在S中。

A*搜索算法的优点:求解出状态空间搜索的最短路径。

我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。

f'(n) = g'(n) + h'(n)

f'(n)是估价函数,g'(n)是起点到节点n的最短路径值,h'(n)是n到目标的最短路经的启发值。由于这个f'(n)其实是无法预先知道的,所以我们用前面的估价函数f(n)做近似。g(n)代替g'(n),但 g(n)>=g'(n)才可。可以证明应用这样的估价函数是可以找到最短路径的,也就是可采纳的。我们说应用这种估价函数的最好优先算法就是A*算法。

A*搜索算法——图形搜索算法相关推荐

  1. AI中的几种搜索算法---A*搜索算法

    AI中的几种搜索算法---A*搜索算法 引言 A*搜索算法作为一种典型的启发式搜索(Informed Search)算法,这种算法与一般的算法相比,便是其在搜索过程中,会利用一些引导机制,来引导整个搜 ...

  2. Python实现 宽度/广度优先搜索算法, 深度优先搜索算法

    Python实现 宽度/广度优先搜索算法, 深度优先搜索算法 1. 二叉树图 2. 宽度/广度优先搜索算法(Breadth First Search,BSF) 3. 深度优先搜索算法 4. 宽度/广度 ...

  3. AI中的几种搜索算法---Tabu搜索算法

    AI中的几种搜索算法---Tabu搜索算法 引言 Tabu相对于启发式算法家族中其他成员,要简单易懂的多.关于启发式算法的基本概念可以参见笔者的<AI中的几种搜索算法---A*搜索算法>. ...

  4. 7.搜索求解策略: 搜索的概念, 状态空间搜索, 盲目/启发式图搜索策略, 启发信息和估价函数, A搜索算法, A*搜索算法及特性分析

    本文内容为浙江工业大学王万良慕课课程的课程讲义, 将其整理为OneNote笔记同时添加了本人上课时的课堂笔记, 且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看,特将此上传到CSD ...

  5. python搜索算法_搜索算法(Python)

    参考:<数据结构(Python 语言描述)> - 3.3 搜索算法 学习思路按照以下三个层次推进:学习算法设计思路 >> 实现算法 >> 复杂度分析 Tips:为了 ...

  6. 计算机、数学、运筹学等领域的32个重要算法

    奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提 ...

  7. 两个矩阵是否相交的算法_收藏 | 计算机、数学、运筹学等领域的32个重要算法...

    来源:大数据 本文约2500字,建议阅读5分钟. 本文为你分享计算机.数学.运筹学等领域的32个重要算法. [ 导读 ] 奥地利符号计算研究所(Research Institute for Symbo ...

  8. 干货丨大数据最核心的关键技术:32个算法

    奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提 ...

  9. 计算机、数学、运筹学等领域32个重要算法

    来源: 深度学习与机器视觉 奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自 ...

最新文章

  1. Linux系统文件安全与权限
  2. 关于null和undefined
  3. Javscript 实现字符数串比对排序(包含数字及中文数字)
  4. Druid monitor中SQL监控显示不出数据(已解决)
  5. 字节面试算法题:用集合中的数凑小于target的最大数(Java实现,各类用例均通过)
  6. W3af详细安装与基本使用
  7. mysql转储导入错误_将MySQL转储应用于RDS时出现“无法解析表名”错误
  8. (一)Activiti 数据库25张表——一般数据1 (ACT_GE_BYTEARRAY)
  9. 卡耐基:一个人的成功,只有15%是靠专业技术
  10. 计算机电脑主板电池,电脑主板电池怎么放电_主板电池放电要多久_电脑主板电池为啥要放电...
  11. Qt经典蓝牙系列四(经典蓝牙客户端的设计 纯Qt代码) android/windows10
  12. Python之路—200行Python代码搞了个打飞机游戏!!
  13. 【高质量编程指南笔记】
  14. com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known serve
  15. 【疑难教程】视频上云服务平台EasyCVR使用Go语言可执行程序出现“Process XXX has exited with status XXXX”错误
  16. PermGen space 1
  17. NAT之SNAT和DNAT
  18. 超声波雷达驱动(Elmos524.03Elmos524.09)
  19. 第八章 Docker常规安装简介
  20. linux剪切到另一个文件夹,linux下文件夹操作常见命令如创建、复制、剪切、重命名、清空和删除命令 实例说明...

热门文章

  1. 浪潮的“Inspur品牌”
  2. 从定标准到搭流程,看UWA性能保障体系搭建的实例分享
  3. java中的集合框架
  4. 全景故宫--全景图片展现数字故宫
  5. Ubuntu制作本地源
  6. 用计算机演奏的生日快乐歌,51单片机演奏音乐“祝你生日快乐”
  7. Python - 随机生成英文字母
  8. 【必看】企业网站IPv6改造升级方案---中科三方
  9. 用AkShare获取实盘沪深可转债数据
  10. 66、气体灭火系统的巡查内容