搜索技术【启发式搜索】 - 简介 & A* 算法 & IDA*算法

尽管广度优先搜索、深度优先搜索加上有效的剪枝方法,可以解决很多问题,但这两种搜索都是盲目的,它们不管目标在哪里,只管按照自己的方式搜索,会存在很多没必要的搜索。

所以有没有一种启发式搜索算法,可以启发程序朝着目标的方向搜索,从而提高搜索效率呢?

启发式搜索算法对每一个搜索状态都进行评估,选择估值最好的状态,从该状态进行搜索直到目标。如何对一个状态进行评估呢?一个状态的当前代价最小,只能说明从初始状态到当前状态的代价最小,不代表总的代价最小,因为余下的路还很长,未来的代价有可能更高。

因此评估需要考虑两部分:当前代价和未来估价。

评估函数f (x ):f (x )=g (x )+h (x ),其中,g (x )表示从初始状态到当前状态x 的代价,h (x )表示从当前状态到目标状态的估价,h (x )被称为启发函数。

常用的启发式搜索算法有很多,例如A*、IDA*、模拟退火算法、蚁群算法、遗传算法等。

【A*算法】

A算法是带有评估函数的优先队列式广度优先搜索算法。在广度优先搜索时维护一个优先队列,每次都从优先队列中取出评估值最优的状态进行扩展。第1次从优先队列中取出目标状态时,即可得到最优解。A算法提高搜索效率的关键在于启发函数的设计,不同的启发函数,其搜索效率不同。启发函数h (x )越接近当前状态到目标状态的实际代价h′ (x ),A*算法的效率就越高。

启发函数的估值不能超过实际代价,即h (x )≤h ′(x )。

如果启发函数的估值超过实际代价,则失去意义。

例如,如果当前节点到目标的实际最短距离为30,当前节点的启发函数估值为50,另一个节点的启发函数估值为100,则在两个节点已走过路径长度g(x )相同的情况下,不能说明当前节点就一定比另一个节点优,也没有比较的意义,反正两个都不优。

如果令所有状态的h (x )都为0,则退化为普通的优先队列式广度优先搜索算法,不再有启发式搜索的作用。

【IDA*算法】

IDA*算法是带有评估函数的迭代加深DFS算法。

深度优先搜索有可能跌入一个无底深渊,搜索了很多步也无法找到问题的解,因此要对搜索的深度加以限制,超过该深度便不再搜索,立即回溯。迭代加深DFS算法是深度优先搜索算法的一种变形,事先限定一个深度depth,在不超过该深度的情况下进行深度优先搜索,如果找不到解,则增加深度限制,重新进行搜索,直到找到目标。IDA*算法设置了一个评估函数f (x):当前深度+未来估计步数,当f (x )>depth时立即回溯,避免无效搜索,提高效率。

在很多情况下,IDA*算法的效率更高,代码更少。

搜索技术【启发式搜索】 - 简介 A* 算法 IDA*算法相关推荐

  1. 白话Elasticsearch26-深度探秘搜索技术之function_score自定义相关度分数算法

    文章目录 概述 官方说明 例子 概述 继续跟中华石杉老师学习ES,第26篇 课程地址: https://www.roncoo.com/view/55 官方说明 https://www.elastic. ...

  2. 聪明的探险家是如何探险的——IDA*算法

    北风吹雪月如银,恒心不灭志常新. 书山有路勤为径,学海无涯志气真. 知识海洋无边际,刻苦努力绘新图. 追逐梦想不停步,铸就人生辉煌路. IDA* 算法的前置知识分别是A* 算法和迭代加深搜索算法 文章 ...

  3. 算法入门到进阶(三)——搜索技术(BFS和A*算法)

    文章目录 用BFS求最短路径 A*算法与最短路径 A*算法与八数码问题 双向广搜 题目 思路 用BFS求最短路径 最短路径是图论的一个基本问题,有很多复杂的算法.不过,在特殊的地图中,BFS也是很好的 ...

  4. DL之DNN优化技术:神经网络算法简介之GD/SGD算法(BP的梯度下降算法)的简介、理解、代码实现、SGD缺点及改进(Momentum/NAG/Ada系列/RMSProp)之详细攻略

    DL之DNN优化技术:神经网络算法简介之GD/SGD算法(BP的梯度下降算法)的简介.理解.代码实现.SGD缺点及改进(Momentum/NAG/Ada系列/RMSProp)之详细攻略 目录 GD算法 ...

  5. DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介、代码实现、代码调参之详细攻略

    DL之DNN优化技术:神经网络算法简介之GD/SGD算法的简介.代码实现.代码调参之详细攻略 目录 GD算法的简介 GD/SGD算法的代码实现 1.Matlab编程实现 GD算法的改进算法 GD算法中 ...

  6. 基本搜索技术--人机博弈算法(极大极小,深度优先,负极大值)

    极大极小值算法( Minimax algorithm) 在上文的博弈树中,如果我们令甲胜的局面值为1,乙胜的局面值为-1,而和局的值为0.当轮到甲走时,甲定会选择子节点值最大的走法:而轮到乙时,乙则会 ...

  7. 搜索技术哪些算法模型可以实现千人千面个性化服务

    用户行为数据如何实时的应用在搜索服务中那? 今天将介绍四个"个性化搜索算法模型",希望对你有所帮助~ 一.个性化排序应用 类目预测 类目预测是基于物品/内容的类目信息改善搜索效果的 ...

  8. DSt:数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构、数据运算【十大排序/四大查找-图三大搜索-树三大遍历】、高级算法【贪心/分治/动态规划】之详细攻略

    DSt:数据结构的简介.最强学习路线(逻辑结构[数组-链表-栈和队列/树-图-哈希].物理结构[元素/关系].数据运算[十大排序/四大查找-图三大搜索-树三大遍历].高级算法[贪心/分治/动态规划]) ...

  9. AutoML:人工智能领域-自动化技术之机器学习自动化技术的简介(预处理→设计算法→训练模型→优化参数)、常用的工具或框架之详细攻略

    AutoML:人工智能领域-自动化技术之机器学习自动化技术的简介(预处理→设计算法→训练模型→优化参数).常用的工具或框架之详细攻略 目录 自动化机器学习技术的简介

最新文章

  1. 倒计时1天,2018 AI开发者报名通道即将关闭(附参会提醒)
  2. 打破 Google 破坏性的搜索垄断
  3. 一起读懂传说中的经典:受限玻尔兹曼机
  4. 项目启动居然如此重要!
  5. python seo百度_Python与seo,百度关键词相关搜索关键词采集源码
  6. AspnetCore 缓存篇
  7. Axure8.1破解码 注册码 授权码
  8. yuki翻译器钩子_YUKI GALGAME翻译器
  9. 坚果nuts 加速 官网_quot;如果你不吃坚果,你就是坚果(傻瓜)!quot;
  10. 对于超前,滞后,超前滞后使用范围
  11. 新手小白适合学习什么编程语言
  12. 火车硬座、高铁动车、国内经济舱 座位分布表
  13. [学习笔记-FPGA]Vivado出现信号差分问题
  14. JAVA多线程使用场景和注意事项
  15. 深度linux密码忘记,Deepin深度系统登录密码忘记重设
  16. 用Java整合Clamav病毒库检测病毒
  17. Linux中 ifconfig命令只有lo没有eth0/ens33
  18. JavaEE入门级别最全教程1--初学者必看
  19. 关于KEIL的RTX 堆栈溢出问题
  20. 【RT-Thread Nano】大作业:语音生活小助手

热门文章

  1. Xen - Networking
  2. “EXCEL 文件打开后,显示空白”的解决方法
  3. 初步熟悉新webserver goahead
  4. OCR:财务报表识别
  5. AspectJ 学习笔记
  6. x264源码分析与应用示例(一)——视频编码基本流程
  7. python并发之concurrent快速入门
  8. Win7系统提示“内置管理员无法激活此应用”的原因和解决方法
  9. 根据字体大小得到字符串显示时的宽度(C#)
  10. GAN生成对抗网络基础知识