当前位置: 首页 > news >正文

【AI】Best-first search (or Greedy Search) 最佳优先搜索(或贪婪搜索)

本博客讨论什么是最佳优先搜索,或称贪婪搜索。
本博客将借助多个示例去引入贪婪搜索的相关知识与概念。以助于理解掌握。

贪婪搜索算法概述

贪婪搜索算法的思想,是通过对比相邻点中哪个与目标点的距离最短来确定。

示例如下
e . g . e.g. e.g. A城市 有两个相邻城市,B与C;B城市 有两个相邻城市,A与E;C城市 也有两个相邻城市,A与E。现在我们想从 A城市E城市,但是无奈没有路,需要借道 B城市 或者 C城市,那么请问根据贪婪算法我们应该如何做出选择?

在这里插入图片描述

解答: 根据贪婪算法,我们计算 B城市E城市 的距离 l B E l_{BE} lBE 以及 C城市E城市 的距离 l C E l_{CE} lCE,计算结果为 l B E < l C E l_{BE}<l_{CE} lBE<lCE,所以我们选择从 A城市 途径 B城市 最终抵达 E城市


现在我们来解决一个更为复杂的示例:

贪婪算法求“最短”路线

示例如下
e . g . e.g. e.g. 用贪婪搜索尝试寻找 城市Arad城市Bucharest 的“最短”路线。(图中已圈出)
在这里插入图片描述
首先,起点 城市Arad 有三个相邻的城市 城市Zerind城市Sibiu城市Timisoara。根据贪婪算法,我们对这三个城市计算其与终点 城市Bucharest 的直线距离:
其实在这里会引出一个问题,那就是计算距离的时候用曼哈顿距离法还是用欧几里得距离法。在本道题中我们先默认使用欧几里得距离法,即“两点之间线段最短”的长度。本题末尾会讨论距离问题。
在这里插入图片描述

城市Distance
Zerind374
Sibiu253
Timisoara329

其实很明显,在与起点 城市Arad 相连的三个城市中,城市Sibiu 明显距离终点更近,所以我们选择 城市Sibiu 作为途径点。

第二步,当我们抵达了 城市Sibiu 之后,需要考虑的问题是选择哪个城市作为下一个途径点呢?与 城市Sibiu 邻接的城市有 城市Oradea城市Arad城市Fagaras城市Rimnicu Vilcea,我们对这四个城市计算其与终点 城市Bucharest 的直线距离:
在这里插入图片描述

城市Distance
Oradea380
Arad366
Fagaras176
Rimnicu Vilcea193

明显,Fagaras “力排众议”,距离终点 城市Bucharest 最近,成为第二个途径点。

第三步,当我们抵达Fagaras后,开始选择下一个途径点。因为与Fagaras有两个邻接点,Sibiu 与 终点Bucharest,此时已不用多想,直接Bucharest。我们抵达了终点!

所以按照贪婪搜索算法,我们从初始点Arad到终点Bucharest的路线为:
在这里插入图片描述
但是其实这个路线真的是最短路径吗?其实还真不是。所以我们通过贪婪搜索算法求得的路线,不一定为最短路径。


QA 在上体中可能遇到的问题

Q1:为什么Fagaras与Bucharest的距离是176不是标注的211?

A1:因为标注的距离并非直线距离,而是通过 城市Fagaras 抵达 城市Bucharest 的实际距离。往往一个城市到另一个城市之间是无法直接直线抵达的,本题目中标注的直线只是为了简化问题,方便读者理解。


Q2:曼哈顿距离与欧几里得距离

A2:曼哈顿距离,指的是两点之间的距离要将x与y向量之间的距离分别求得 ( x 1 − x 2 ) + ( y 1 − y 2 ) (x_1-x_2)+(y_1-y_2) (x1x2)+(y1y2);而欧几里得,欧氏距离,通过两点之间的连线,即 ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 \sqrt {(x_1-x_2)^2+(y_1-y_2)^2} (x1x2)2+(y1y2)2 求得。


在这里插入图片描述
M a n h a t t a n D i s t a n c e = ∣ 5 − 1 ∣ + ∣ 4 − 1 ∣ = 7 Manhattan Distance = |5-1|+|4-1|=7 ManhattanDistance=∣51∣+∣41∣=7

E u c l i d e a n D i s t a n c e = ( 5 − 1 ) 2 + ( 4 − 1 ) 2 = 5 Euclidean Distance = \sqrt {(5-1)^2+(4-1)^2}=5 EuclideanDistance=(51)2+(41)2 =5


Manhattan Distance 曼哈顿距离,主要应用场景为城市交通。在大多数城市,两个点之间的距离很难做到直线抵达。
d ( x i , x j ) = ∣ x i 1 , x j 1 ∣ + ∣ x i p , x j p ∣ + . . . + ∣ x i p , x j p ∣ d(x_i, x_j)=|x_{i1}, x_{j1}|+|x_{ip}, x_{jp}|+...+|x_{ip}, x_{jp}| d(xi,xj)=xi1,xj1+xip,xjp+...+xip,xjp


Euclidean Distance 欧几里得距离,主要应用场景为数学。
d ( x i , x j ) = ∣ x i 1 , x j 1 ∣ 2 + ∣ x i p , x j p ∣ 2 + . . . + ∣ x i p , x j p ∣ 2 d(x_i,x_j)=\sqrt {|x_{i1}, x_{j1}|^2+|x_{ip}, x_{jp}|^2+...+|x_{ip}, x_{jp}|^2} d(xi,xj)=xi1,xj12+xip,xjp2+...+xip,xjp2


在本题中,我们选择欧几里得距离作为我们的启发值。即我们用直线做的启发值。其释义是我们选择通过两城市之间的直线距离作为其之间的距离。

有关贪婪算法介绍到这里,是否存在问题,可留言~

相关文章:

  • wordpress思维导图/seo全称是什么意思
  • 用wordpress做站群/seo网站推广工具
  • 北京公司网站建设定/如何推广网上国网
  • java做web网站的流程/如何建立网页
  • 如何在百度上做公司网站/网络营销策划书800字
  • 日语网站设计/门户网站有哪些
  • android手机免费无线投屏电脑方法教程步骤AirServer7
  • 【PyTorch深度学习项目实战100例】—— 基于BiGRU短期电力负荷预测方法 | 第28例
  • STM32:串口协议(内含:1.通信接口+2.串口通信+3.硬件电路+4.电平标准+5.串口参数及时序+6.串口时序)
  • 软考高级系统架构设计师系列论文五十四:论软件设计模式及应用
  • Tomcat值NGINX+Tomcat实现负载均衡、动静分离集群部署
  • 我用【c++】写出了会说话的学生考勤系统
  • Redis的性能优化一些方案
  • Keras深度学习实战(30)——使用文本生成模型进行文学创作
  • 视觉目标检测大模型套件detrex-调研
  • HTML生日快乐代码 html生日快乐网站制作 html烟花表白网站制作
  • 嵌入式软件工程师面试题(七)
  • 项目出现的一些代码规范问题