algorithm - 需要一些帮助来理解搜索算法(A*、IDA*、DFS、BFS、IDDFS 等)

标签 algorithm search artificial-intelligence belongs-to

我在理解 AI(人工智能)中使用的一些搜索算法时遇到了一些困难。

  • A* 之间的确切区别是什么?和 IDA* (Iterative Deeping A Star) ?只是启发式功能吗?如果是这样,我仍然无法想象 IDA* 是如何工作的……:/
  • IDA*是否与BFS (Breadth-First search)相同? (当扩展的深度只有 1 级时,我的意思是 - 只是“向下”移动一级,IDA*BFS 之间有什么区别吗)<
  • IDDFS (Iterative-Deeping Depth-First Search)IDA*相同,除了启发式函数(相当于IDDFS中的0)
  • IDDFS 到底是什么 - 向下移动一个级别,然后使用 DFS (Depth-First Search) ?如果是这样,那么很多状态的计算(扩展)比一个多得多。或者它是这样的 - 使用具有特定深度的 DFS,然后存储“叶子”(最后扩展的节点) ,并遍历它们以再次使用 DFS(实际上是 BFS?)
  • 迭代”从何而来?如我所见,IDDFS 根本不是迭代的,它仍然是递归的,只是混合了 BFSDFS?还是我错了?或者这个“迭代”与递归的对立面无关?
  • IDA* 的“迭代”是什么?

能否请您提供一些示例?我整天都在阅读这些算法,我知道它们的优缺点、复杂性等,但我就是找不到任何好的例子(除了 A*;我知道 BFS 和 DFS,其他的让我很烦)。我在不同的地方找到了一些 IDA* 的伪代码,但它们完全不同。

示例将是理解算法的最佳方式..但我找不到。即使在 TopCoder我没有找到任何关于 IDA* 的信息。

我已经阅读了 wiki 文章并且正在寻找新的东西 (:

非常感谢!


编辑: Here some nice articles , 但它们太理论化了。没有例子,没有任何具体的事情。但还是很有用的。我会推荐他们 (=

最佳答案

让我们从迭代加深深度优先搜索开始。

想法是深度优先搜索是高效的,但不一定会很快找到正确答案。所以,做一个深度为 1 的 DFS。如果你还没有找到答案,就做一个深度为 2 的 DFS。重复直到你找到答案,或者决定放弃。这会自动为您提供搜索树上的最短路径,因为如果存在长度为 N 的路径,您永远不会搜索长度为 N + 1 的路径。

你需要做的是改变深度优先搜索,使其深入 N 个节点(即,如果深度为 N,则不要生成新节点),并用递增的 N 调用它。你除了 N 的值以及您为 DFS 所做的任何操作之外,不要存储任何内容。

迭代伴随着迭代增加搜索深度。如果分支因子大于 2,则性能可能出奇地好,因为在这种情况下,深度有界 DFS 的大部分成本都处于所达到的最低水平。

首先学习迭代深化 DFS,然后将其应用于 IDA*。我在 15 多年前读过一篇关于这些搜索的早期 Korf 论文,但不记得 IDA* 是如何很好地工作的,但你的主要问题是你一开始就不了解迭代加深。

关于algorithm - 需要一些帮助来理解搜索算法(A*、IDA*、DFS、BFS、IDDFS 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4381902/

相关文章:

c++ - 解析自然语言

artificial-intelligence - 如何开始神经网络编程

java - gorilla 和波兰人交汇点算法 - 无法找出完美的解决方案和失败的测试用例

java - 埃克托普 CouchDb : Query for pattern with multiple contains

algorithm - 非迭代序列中的循环检测

reactjs - 使用 Lodash 在 React 中进行数据过滤

bash 命令 : search for class in file system of jars

c# - 我如何创建一个测试来查看我的 A.I.是完美的?

c - 什么算法将数字 27 映射到 BBC

algorithm - Python Codility Frog River 一次复杂度