启发式搜索简介

启发式搜索简介启发式搜索 Heuristicall 又称为有信息搜索 InformedSear 它是利用问题拥有的启发信息来引导搜索 达到减少搜索范围 降低问题复杂度的目的 这种利用启发信息的搜索过程称为启发式搜索 简而言之 就是你搜索打出前几个字 就会弹出一些可能你想要的东西了 概念释义启发式策略可以通过指导搜索向最有希望的方向前进 降低了复杂性 通过删除某些状态及其延伸 启发式算法可以消除组合爆炸 并得到令人能接受的解 通常并不一定是最佳解 然而 启发式策略是极易出错的 在解决问

启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search),它是利用问题拥有的启发信息来引导搜索,达到减少搜索范围、降低问题复杂度的目的,这种利用启发信息的搜索过程称为启发式搜索。简而言之,就是你搜索打出前几个字,就会弹出一些可能你想要的东西了。

概念释义

启发式策略可以通过指导搜索向最有希望的方向前进,降低了复杂性。通过删除某些状态及其延伸,启发式算法可以消除组合爆炸,并得到令人能接受的解(通常并不一定是最佳解)。

然而,启发式策略是极易出错的。在解决问题的过程中启发仅仅是下一步将要采取措施的一个猜想,常常根据经验和直觉来判断。由于启发式搜索只有有限的信息(比如当前状态的描述),要想预测进一步搜索过程中状态空间的具体行为则很难。一个启发式搜索可能得到一个次最佳解,也可能一无所获。这是启发式搜索固有的局限性。这种局限性不可能由所谓更好的启发式策略或更有效的搜索算法来消除。一般说来,启发信息越强,扩展的无用节点就越少。引入强的启发信息,有可能大大降低搜索工作量,但不能保证找到最小耗散值的解路径(最佳路径)。因此,在实际应用中,最好能引入降低搜索工作量的启发信息而不牺牲找到最佳路径的保证。 

什么是启发式搜索(heuristic  search)

  利用当前与问题有关的信息作为启发式信息,这些信息是能够提升查找效率以及减少查找次数的。

如何使用这些信息,我们定义了一个估价函数 h(x) 。h(x)是对当前状态x的一个估计,表示 x状态到目标状态的距离。

有:1、h(x) >= 0 ;  2、h(x)越小表示 x 越接近目标状态; 3、如果 h(x) ==0 ,说明达到目标状态。

与问题相关的启发式信息都被计算为一定的 h(x) 的值,引入到搜索过程中。

  然而,有了启发式信息还不行,还需要起始状态到 x 状态所花的代价,我们称为 g(x) 。比如在走迷宫问题、八数码问题,我们的 g(x) 就是从起点到 x 位置花的步数 ,h(x) 就是与目标状态的曼哈顿距离或者相差的数目;在最短路径中,我们的 g(x) 就是到 x 点的权值,h(x)  就是 x 点到目标结点的最短路或直线距离。

  现在,从 h(x) 和 g(x) 的定义中不能看出,假如我们搜索依据为 F(x) 函数。

  当 F(x) = g(x) 的时候就是一个等代价搜索,完全是按照花了多少代价去搜索。比如 bfs,我们每次都是从离得近的层开始搜索,一层一层搜 ;以及dijkstra算法,也是依据每条边的代价开始选择搜索方向。 

  当F(x) = h(x) 的时候就相当于一个贪婪优先搜索。每次都是向最靠近目标的状态靠近。

  人们发现,等代价搜索虽然具有完备性,能找到最优解,但是效率太低。贪婪优先搜索不具有完备性,不一定能找到解,最坏的情况下类似于dfs。

  这时候,有人提出了A算法。令F(x) = g(x) + h(x) 。(这里的 h(x) 没有限制)。虽然提高了算法效率,但是不能保证找到最优解,不适合的 h(x)定义会导致算法找不到解。不具有完备性和最优性

  几年后有人提出了 A*算法。该算法仅仅对A算法进行了小小的修改。并证明了当估价函数满足一定条件,算法一定能找到最优解。估价函数满足一定条件的算法称为A*算法。

它的限制条件是 F(x) = g(x) + h(x) 。 代价函数g(x) >0 ;h(x) 的值不大于x到目标的实际代价 h*(x) 。即定义的 h(x) 是可纳的,是乐观的

怎么理解第二个条件呢?

  打个比方:你要从x走到目的地,那么 h(x) 就是你感觉或者目测大概要走的距离,h*(x) 则是你到达目的地后,发现你实际走了的距离。你预想的距离一定是比实际距离短,或者刚好等于实际距离的值。这样我们称你的 h(x) 是可纳的,是乐观的。

 不同的估价函数对算法的效率可能产生极大的影响。尤其是 h(x) 的选定,比如在接下来的八数码问题中,我们选择了曼哈顿距离之和作为 h(x) ,你也可以选择相差的格子作为 h(x),只不过搜索的次数会不同。当 h(x) 越接近 h*(x) ,那么扩展的结点越少!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209677.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:40
下一篇 2026年3月19日 上午8:40


相关推荐

  • 讯飞星火AI图像生成如何操作

    讯飞星火AI图像生成如何操作

    2026年3月14日
    3
  • c语言位运算取反_c语言取反程序

    c语言位运算取反_c语言取反程序先说结论假设x为signedint,也就是说它的补码表示中第一位表示符号(1:负;0:正),那么~x=-(x+1)证明计算机内部使用补码表示,则问题相当于求证:当x为signedint时,(~x)补=[-(x+1)]补(0)证明:因为补码有个规律:(x+y)补=(x)补+(y)补,所以:[-(x+1)]补=[(-x)+(-1)]补=(-x)补+(-1)补要证(~x)补=[-(x+1)…

    2022年8月14日
    6
  • Gloand 2021 激活码【2021.10最新】

    (Gloand 2021 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月28日
    48
  • 存储过程基础语法

    存储过程基础语法存储过程1CREATE OR REPLACE PROCEDURE 存储过程名2IS3BEGIN4NULL;5END;行1:CREATE&

    2022年7月1日
    23
  • Jersey框架一:Jersey RESTful WebService框架简介[通俗易懂]

    Jersey框架一:Jersey RESTful WebService框架简介[通俗易懂]开发RESTfulWebService意味着支持在多种媒体类型以及抽象底层的客户端-服务器通信细节,如果没有一个好的工具包可用,这将是一个困难的任务为了简化使用JAVA开发RESTfulWebService及其客户端,一个轻量级的标准被提出:JAX-RSAPIJerseyRESTfulWebService框架是一个开源的、产品级别的JAVA框架,支持JAX-RSAPI并且是一个JAX-RS(JSR311和JSR339)的参考实现Jersey不仅仅是一个JAX-RS的参考实现,Jers

    2025年11月27日
    4
  • VSCode创建Vue项目完整教程

    VSCode创建Vue项目完整教程文章目录一 配置环境 1 安装 VSCode2 安装 node js3 安装配置脚手架 vue cli 二 创建 vue 项目 1 命令方式创建 2 重新初始化依赖 3 启动项目总结一 配置环境 1 安装 VSCode 官网下载 https code visualstudio com 下载 VSCode 按照步骤安装 2 安装 node js 1 官网 https nodejs org en 下载 node js 按照步骤安装即可 node js 安装完成之后会同步安装 npm 2 配置环境变量 把 node j

    2026年3月20日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号