文章目录

  • 前言
  • 一、启发式搜索(heuristic search)
    • 方法(Dijkstra search,Greedy Search,A* )
    • 性质(Admissible & Consistent & dominate)
    • 总结

前言

启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search),它是利用问题拥有的启发信息来引导搜索,达到减少搜索范围、降低问题复杂度的目的,这种利用启发信息的搜索过程称为启发式搜索。简单来说,就是已知起点和终点位置,寻找最佳路径。


一、启发式搜索(heuristic search)

方法(Dijkstra search,Greedy Search,A* )

代价一致搜索 (Uniform Cost Search or Dijkstra search)
贪心搜索 (Greedy Search)
A星搜索 (A* Search)

首先, 使用评价函数 f(x) 来对上述的节点选择顺序进行排序
下面先定义两个函数

g(x) 为从根节点到x节点的代价总和

h(x) 为从x节点到目标节点的估计代价总和

这类应用算法有

代价一致搜索 (Uniform Cost Search or Dijkstra search) f(x) = g(x)

贪心搜索 (Greedy Search) f(x) = h(x)

A星搜索 (A* Search) f(x) = g(x) + h(x)

这个网址对算法进行了可视化表示,解释和例子非常具体的有助于理解,强烈推荐!!!!!link~~~~~~~~~~

性质(Admissible & Consistent & dominate)

Admissible heuristic

admissibility是启发式搜索的一个性质,如果满足这个性质,那么,启发函数一定能得到最佳solution。

A*搜索能找到最优解的充分条件:

  1. 搜索树上存在着从起始点到目标点的最优路径
  2. 问题域是有限的
  3. 所有结点的子结点的成本>0
  4. h(n) =< h*(n) (h*(n)为从节点n到目标点的实际成本)

1 2 3易满足,第4条中这样的启发函数被称为Admissible heuristic,也就是说在A*中我们对目标的估计必须小于或等于其实际值,不然可能会出现找不到最优路径或者根本找不到路径的情况

Consistent heuristic

N是开始节点,绿色的是目标节点,h(N)则是从N到目标节点的启发函数,N’为任意不同于N的节点
A star with tree能找到最优解的充分条件:

  1. 搜索树上存在着从起始点到目标点的最优路径
  2. 问题域是有限的
  3. 所有结点的子结点的成本>0
  4. h(N’) + c(N, N’) < h(N)
    这样的启发函数被称为Consistent heuristic,只有满足了这个才能保证A*算法在图搜索中能找到最优解。

一个启发函数是consistent,它也是admissible。反之,不可。

dominate

Dominance(用于表现不同启发函数的关系)
two admissible heuristics ha, hb:如果对于所有n, ha(n) >hb(n),那么,我们可以说 ha dominates hb,对于这个search问题,我们最好使用ha作为启发函数。

总结

A star算法的特点(考虑g(x)+h(x),注意树搜索满足Admissible heuristic,图搜索满足Consistent heuristic时)

  1. 完备性:肯定能找到最优解
  2. 最优性:找到的解花费最小
  3. 快:扩展更少的节点

UCS(代价一致搜索,只考虑g(x))

  1. 完备性:肯定能找到最优解
  2. 最优性:找到的解花费最小
  3. 比A*慢一些
    广度优先搜索是代价一致搜索的特例

贪婪搜索(启发式搜索,但只考虑h(x))

  1. 不完备性:不保证能找到最优解
    深度优先搜索是贪婪搜索的特例(令h(n)===0,A*搜索退化为宽度优先搜索(BFS),不估计成本,肯定能找到最优解)

最佳路径搜索(二):启发式搜索(代价一致搜索(Dijkstra search),贪心搜索,A*搜索)相关推荐

  1. 广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first search,BFS)

    广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first search,BFS) 1. 广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first searc ...

  2. C语言实现跳转搜索jump search算法(附完整源码)

    跳转搜索jump search算法 跳转搜索jump search算法的完整源码(定义,实现,main函数测试) 跳转搜索jump search算法的完整源码(定义,实现,main函数测试) #inc ...

  3. php制作搜索框_搜索功能(search.php)模板制作 - WordPress模板开发

    搜索功能(search.php)模板制作 搜索功能是任何网站都必须的功能,通过搜索功能,用户可以快速的在我们的网站上找到自己需要的内容.在wordpress模板制作教程中,搜索功能也需要制作出来,这就 ...

  4. 搜索条(在表格中)实现搜索功能

    /* 此代码可通过首字母实现搜索 */ <UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate>{NSArray *_ ...

  5. Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二)

    原文:Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(二) Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一) 接上一篇 ...

  6. 【Nav2中文网】六、插件教程(一)编写新的二维代价地图(Costmap2D)插件

    本教程来自:Nav2中文网 Nav2交流社区:https://fishros.org.cn/forum ROS2/Nav2千人交流群:(QQ)139707339 更多精彩教程请关注微信公众号:鱼香RO ...

  7. 加拿大两院院士裴健:搜索皆智能​,智能皆搜索

    6月23日,加拿大西门菲莎大学教授裴健在第二届北京智源大会智能信息检索与挖掘专题论坛上做了< 智能搜索:从工具到思维方式和心智>的报告. 裴健最近当选为加拿大工程院院士,现在是加拿大皇家科 ...

  8. 图的广度优先搜索(bfs)以及深度优先搜索(dfs)

    1.前言 和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次. 但是图的遍历相对树而言要更为复杂.因为图中的任意顶点都可能与其他顶点相邻,所以在图的遍历中 ...

  9. 【算法】广度优先搜索(BFS)和深度优先搜索(DFS)

    https://blog.csdn.net/raphealguo/article/details/7523411 https://blog.csdn.net/qq_41681241/article/d ...

  10. 深度优先搜索(DFS)和广度优先搜索(BFS)

    深度优先搜索和广度优先搜索,都是图形搜索算法,它两相似,又却不同,在应用上也被用到不同的地方.这里拿一起讨论,方便比较. 先给大家说一下两者大概的区别: 如果搜索是以接近起始状态的程序依次扩展状态的, ...

最新文章

  1. js中对变量初始化的重要性
  2. java笔记之字符串,gc
  3. 【开源】WeChatRobot+WeChatHelper 制作自己的微信机器人
  4. jni java共享变量_Android JNI开发系列(十)JNI访问 Java 实例变量和静态变量
  5. oracle给每行加上序号,Oracle 根据分类字段给查询结果添加序号
  6. RTE2021,实时互动技术的进化与蝶变
  7. ipmsg飞鸽传书系统即时通讯
  8. 草稿 listview控件切换大小图标
  9. js中如何在不影响既有事件监听的前提下新增监听器
  10. oracle全文检索 分区表,oracle全文检索
  11. 微软自动化测试工具Playwright快速上手指南
  12. ARM与x86–蝶变ARM
  13. 六大设计原则----依赖倒置原则
  14. java-opencv 米粒数_Python opencv学习音符的米粒数,返回每个米粒的位置面积和总米粒数的平均面积,pythonopencv,笔记,之数,并,一个,及,个数...
  15. css3新单位vw、vh、vmin、vmax的使用介绍
  16. 新浪财经独家对话达利欧:桥水员工离职率曾高达30%
  17. Excel 斜线表头制作方法
  18. XML的两种常见格式
  19. 查看Oracle数据库命中率
  20. 数据孤岛下的新破局 Real Time DaaS:面向 AP+TP 业务的数据平台架构

热门文章

  1. go产生平台相关的0xFFFF
  2. 启用iptables后,连接速度很慢
  3. 二分查找算法-java
  4. [github高级控件] 带你走近 - CircleIndicator指示器原点动画切换
  5. 【转】android开发必看资源URL
  6. [2018.04.29 T1] 图
  7. mysql查询季度数据统计_mysql按年度、季度、月度、周、日SQL统计查询代码
  8. c++模板类_在 MCU 上使用 C++ 之模板类进阶与线性 Kalman 算法代码
  9. 获取服务器响应失效,从Web服务器获取响应时出现问题
  10. ios 设置按钮不可见_ios开发中button控件的属性及常见问题