图搜索和树搜索有什么区别?

2023-12-30

有什么区别图搜索 and 树搜索有关 DFS、A* 搜索的版本人工智能?


从现有的答案来看,这个概念似乎存在很多混乱。

问题始终是图表

树搜索和图搜索之间的区别并不在于问题图是树还是一般图。始终假设您正在处理一般图表。区别在于遍历模式用于搜索图形,图形可以是图形或树形。

如果你正在处理树形problem,两种算法变体都会产生相同的结果。因此您可以选择更简单的树搜索变体。

图和树搜索之间的区别

您的基本图搜索算法如下所示。有起始节点start,有向边为successors and a goal循环条件中使用的规范。open在内存中保存当前正在考虑的节点,开放列表。请注意,以下伪代码并非在每个方面都是正确的 (2)。

树搜索

open <- []
next <- start

while next is not goal {
    add all successors of next to open
    next <- select one node from open
    remove next from open
}

return next

取决于你如何实施select from open,您可以获得搜索算法的不同变体,例如深度优先搜索(DFS)(选择最新元素)、广度优先搜索(BFS)(选择最旧元素)或均匀成本搜索(选择具有最低路径成本的元素),流行的A - 通过选择最低的节点进行星形搜索成本加启发法值,等等。

上面所说的算法实际上被称为树搜索。如果存在多个以起始状态为根的有向路径,它将多次访问底层问题图的状态。如果某个状态位于有向循环上,甚至可以无限次访问该状态。但每次访问对应的都是不同的node在我们的搜索算法生成的树中。有时需要这种明显的低效率,稍后将对此进行解释。

图搜索

正如我们所见,树搜索可以多次访问一个状态。因此,它将多次探索此状态后找到的“子树”,这可能会很昂贵。图搜索通过跟踪所有访问过的状态来解决这个问题封闭名单。如果新找到继任者next已知,它不会被插入到打开列表中:

open <- []
closed <- []
next <- start

while next is not goal {
    add next to closed
    add all successors of next to open, which are not in closed 
    remove next from open
    next <- select from open
}

return next

比较

我们注意到图搜索需要更多内存,因为它会跟踪所有访问过的状态。这可以通过较小的打开列表来补偿,从而提高搜索效率。

最佳解决方案

一些实现方法select可以保证返回最优解决方案 - 即shortest路径或路径最低成本(对于边上有成本的图表)。每当节点按照成本增加的顺序扩展时,或者当成本是非零正常数时,这基本上成立。实现这种选择的常见算法是统一成本搜索 https://en.wikipedia.org/wiki/Dijkstra's_algorithm,或者如果步骤成本相同,BFS https://en.wikipedia.org/wiki/Breadth-first_search or IDDFS https://en.wikipedia.org/wiki/Iterative_deepening_depth-first_search。 IDDFS 避免了 BFS 的过度内存消耗,并且通常建议在步长恒定时用于无信息搜索(也称为强力搜索)。

A* http://en.wikipedia.org/wiki/A*_search_algorithm

还有(非常受欢迎的)A*tree与搜索算法一起使用时,搜索算法可提供最佳解决方案可接受的启发式 http://en.wikipedia.org/wiki/Admissible_heuristic。 A*graph然而,搜索算法只有在与一致(或“单调”)启发式 http://en.wikipedia.org/wiki/Consistent_heuristic(比可受理性更严格的条件)。

(2) 伪代码的缺陷

为简单起见,所提供的代码不会:

  • 处理失败的搜索,即只有找到解决方案才有效
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图搜索和树搜索有什么区别? 的相关文章

  • 将搜索栏从 magento 主页的标题中移动

    我是 magento 的新手 我想将搜索栏从标题移动到主页的中间位置 以便它仅显示在主页上 我在 magento 论坛上阅读了许多相关答案 但所有人都在尝试编辑 box css 中的 mini search 元素 但不幸的是我在此文件中没有
  • 在java中使用自定义比较器在数组中搜索

    为什么总是返回49999无论strToSearch变量保持 即使使用 clank 搜索变量 它也会返回相同的结果 我是不是错过了什么 String arr new String 100000 String strToSearch 12 fo
  • 如何搜索 Google 电子表格?

    我正在进行一些详尽的搜索 需要确定电子表格中是否已存在新域 URL 然而 所有 Spreadsheet 对象都没有搜索功能 即大多数 Document 对象中的 findText 功能 我觉得我错过了一些重要的事情 我缺少什么 查找文本函数
  • Emacs:结合 isearch-forward 和 center-top-bottom

    预先非常感谢您的帮助 在 Emacs 中 我喜欢使用 iseach forward C s 但如果突出显示的字体单词位于屏幕中间而不是最底部的中心 我会更喜欢它 我发现自己不断地这样做 C s foo C s C s C s 哦 这就是我一
  • 需要在 java api 中的 Solr 搜索中搜索文本及其周围的几行

    我正在使用 solr 7 7 2 并且我使用 solrj 在 Solr 中编写了一个 Java 程序 该程序在一个巨大的文本文件中搜索单词 我使用以下代码来显示代表整个文本的搜索结果 SolrQuery params new SolrQue
  • 二维数组中的寻路

    假设我有这个二维数组地图 0 0 0 0 7 1 1 1 1 1 1 1 1 0 7 7 7 7 1 1 1 24 1 1 1 1 0 7 24 24 24 24 24 24 24 1 1 3 1 0 7 23 23 23 23 23 23
  • Powershell 错误:方法调用...不包含名为“replace”的方法

    我想使用 PowerShell 搜索并替换 xml 文件中的字符串 我试过这个 gc d test xml replace 1234 xxxx sc d test xml 这对于我的 test xml 文件效果很好 我的 test xml
  • 搜索/排序算法 - 是否有类似 GoF 的列表?

    我是一名自学成才的开发人员 坦率地说 我不太擅长找出在任何特定情况下使用哪种搜索或排序算法 我只是想知道是否有设计模式 esque 列出了以太坊中可用的常见算法 供我添加书签 就像是 算法名称 带有别名 如果有的话 它解决的问题 大O成本
  • 如何在 Visual Studio 中搜索并让它忽略注释掉的内容?

    我正在 Visual Studio 2005 中重构 C 代码库 我现在已经完成了这个过程的一半 我已经注释掉了很多旧代码并替换或移动了它 现在我正在搜索 看看下一步必须更改 但搜索功能不断为我带来我不再关心的旧注释掉的内容 我还不想删除旧
  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • 如何设计 RESTful 搜索/过滤? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正在 PHP 中设计和实现 RESTful API 然而 我并没有成功地实现我最初的设计 GET users list of users
  • 在多维数组 PHP 的所有键中搜索

    我想在多维数组中的所有键中搜索特定字符串 我只需要弄清楚它是否存在 仅此而已 我想知道访问者的 IP 是否存在于任何数组中 有没有我可以用来执行此操作的 php 函数或方法 我尝试过的每个函数或方法总是返回 false 数组中 数组搜索 数
  • 比 BMH (Boyer–Moore–Horspool) 更快的算法

    您会使用哪种算法来搜索短文本中的短子字符串 简而言之 我的意思是子字符串有 5 10 个字符 字符串有 255 个字符 我正在考虑根据输入数据长度选择算法 哪种算法对于较长的输入更好 Try Turbo BM http www igm un
  • C++ std::vector 搜索值

    我正在尝试优化std vector 搜索 基于索引的迭代向量并返回与 搜索 条件匹配的元素 struct myObj int id char value std vector
  • 利用 Bootstrap 的 typeahead 作为搜索功能

    我的预输入工作得很好 但我对 Javascript 缺乏经验 无法理解如何将输入的结果转换为链接
  • 在 .csv 文件中搜索 C 中的名称匹配项

    我目前有一个 csv 文件 其中包含三个字段 用户 密码 类型 例如 我的文件如下所示 michael sun123 user joseph sierra7 user isaac apple2 sysop 我想从这样的文件中读取并检查用户
  • 我可以使用 vim “star” 搜索来搜索 PHP 类成员和方法吗?

    vim 星号 星号搜索 help star 是一个很棒的功能 它可以让您找到光标所在单词的下一个出现位置 不幸的是 它将美元前缀视为字符串的一部分 因此如果我在类名中的 SearchTerm 上方按 它会在注释中找到 SearchTerm
  • 使用 PHP MySql 进行关键字搜索?

    我的 mysql 表中有标题 varchar 描述 text 关键字 varchar 字段 我保留了关键字字段 因为我认为我只会在这个字段中搜索 但我现在需要在所有三个字段中进行搜索 所以对于关键字 word1 word2 word3 我的
  • 如何实现Tabbar中每个选项卡的搜索动作

    我有一个页面 TabBar 中有 2 个选项卡 如下所示 class SearchByCityOrPerson extends StatefulWidget SearchByCityOrPerson Key key this title s
  • 算法 - 树中所有节点的最大距离

    所以 找到树中两个节点之间的最长路径相当容易 但我想要的是找到从节点出发的最长路径x到树中的另一个节点 对于所有x 这个问题也可以用以下方式表达 计算从给定的树中可以生成的所有有根树的高度 One way of course is to j

随机推荐