常用搜索算法—盲目搜索和启发式搜索

常用搜索算法—盲目搜索和启发式搜索搜索算法本文主要以一些概念对较为常见的搜索作简单介绍 一 盲目搜索对一个图进行搜索意味着按照某种特定的顺序依次访问其顶点 在所有搜索方式中 广度优先算法和深度优先搜索算法都十分重要 因为它们提供了一套系统地访问图数据结构的方法 我们着重讲解广度优先搜索算法 1 深度优先搜索深度优先搜索算法 简称 DFS 是一种用于遍历或搜索树或图的算法 沿着树的深度遍历树的节点 尽可能深的搜索树的分支 当

搜索算法

本文主要以一些概念对较为常见的搜索作简单介绍:

一、盲目搜索

对一个图进行搜索意味着按照某种特定的顺序依次访问其顶点。在所有搜索方式中,广度优先算法和深度优先搜索算法都十分重要,因为它们提供了一套系统地访问图数据结构的方法。我们着重讲解广度优先搜索算法。

Dijkstra算法(可自行设置障碍物)

二、启发式搜索算法

三、启发函数

f ( n ) = g ( n ) + h ( n ) f(n)=g(n)+h(n) f(n)=g(n)+h(n)
f(n)是节点n的综合优先级。当我们选择下一个要遍历的节点时,我们总会选取综合优先级最高(值最小)的节点。g(n) 是节点n距离起点的代价。h(n)是节点n距离终点的预计代价,这也就是A star算法的启发函数。
上面已经提到,启发函数会影响A star算法的行为。
在极端情况下,当启发函数h(n)始终为0,则将由g(n)决定节点的优先级,此时算法就退化成了Dijkstra算法。
如果h(n)始终小于等于节点n到终点的代价,则A star算法保证一定能够找到最短路径。但是当h(n)的值越小,算法将遍历越多的节点,也就导致算法越慢。
如果h(n)完全等于节点n到终点的代价,则A star算法将找到最佳路径,并且速度很快。可惜的是,并非所有场景下都能做到这一点。因为在没有达到终点之前,我们很难确切算出距离终点还有多远。
如果h(n)的值比节点n到终点的代价要大,则A star算法不能保证找到最短路径,不过此时会很快。在另外一个极端情况下,如果h(n)相较于g(n)大很多,则此时只有h(n)产生效果,这也就变成了贪婪最佳优先搜索。
由上面这些信息我们可以知道,通过调节启发函数我们可以控制算法的速度和精确度。因为在一些情况,我们可能未必需要最短路径,而是希望能够尽快找到一个路径即可。这也是A star算法比较灵活的地方。对于网格形式的图,有以下这些启发函数可以使用:
如果图形中只允许朝上下左右四个方向移动,则可以使用曼哈顿距离。
如果图形中允许朝八个方向移动,则可以使用对角距离。
如果图形中允许朝任何方向移动,则可以使用欧几里得距离。









总结

以下网页是五种不同搜索算法的搜索过程对比:

五种搜索算法(可进行添加多种障碍物)

下面对在有权图(紫)和无权图(黄)上利用搜索算法的特点做一个总结:

本文参考文章链接:

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

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

(0)
上一篇 2026年3月19日 下午5:21
下一篇 2026年3月19日 下午5:21


相关推荐

  • 豆包ai创作点赞了的怎么找

    豆包ai创作点赞了的怎么找

    2026年3月13日
    2
  • DateAdd函数

    DateAdd函数在 dateadd 函数中 w y d 返回的日期值是相同的 在 datediff 中 y d 返回日期值相同 w 不同 在 datepart 中 w y d 各不相同 w 可以理解为一周的第几天 y 可以理解为一年的第几天 d 理解为日期就行了 例如 D 2018 1 29 1 dateadd dateadd d 2 d 表示天数加 2 函数返回日期 2018 1 31 dateadd y 2 d 返回天数所在的日期 如题是 29 2 31 天 2018 年的 31 天就是 2018 1 31 dateadd w

    2026年3月19日
    2
  • vsc怎么创建html文件_用vscode写一个html页面

    vsc怎么创建html文件_用vscode写一个html页面1.新建一个文件2.右下角点击纯文本3.选择想要创建的响应的文件,此处输入html4.然后输入!按tab就行了

    2022年8月21日
    22
  • python爬b站弹幕_如何爬取B站数据

    python爬b站弹幕_如何爬取B站数据本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。目标:爬取b站番剧最近更新输出格式:名字+播放量+简介那么开始撸吧~用到的类库:requests:网络请求pyquery:解析xml文档,像使用jquery一样简单哦~1.分析页面布局,找到需要爬取的内容目标url:https://bangumi.bilibili.com/22/…

    2022年8月23日
    11
  • Claude Code介紹和使用建議

    Claude Code介紹和使用建議

    2026年3月16日
    2
  • 使用自己的x3数据集实现SRGAN,小白进坑全收录!

    使用自己的x3数据集实现SRGAN,小白进坑全收录!本文所使用的代码为 https github com open mmlab mmsr 所使用的环境为 python3 6 8 CUDA9 0 176 cuDNN7 6 1 查看 cuda 和 cuDNN 版本的代码如下 查看 cuda 版本 cat usr local cuda version txt 查看 cuDNN 版本 cat usr local cuda include cudn

    2026年3月17日
    2

发表回复

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

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