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

时间:2010-12-07 21:42:26

标签: 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 根本不是迭代的,它仍然是递归的,只是混合 BFS DFS ?或者我错了?或者这个“迭代”与递归相反无关?
  • IDA * 的“迭代”是什么?

请你提供一些例子吗?我整天都在阅读这些算法,我知道它们的优点和缺点,复杂性等等,但我找不到任何好的例子(除了A *;我知道BFS和DFS,其他人打扰我)。我在不同的地方发现了一些IDA *的伪代码,但它们都完全不同。

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

我已阅读维基文章,我正在寻找新的东西(:

非常感谢!


编辑: Here some nice articles,但他们太理论化了。没有例子,没有任何具体的东西。但仍然非常有用。我推荐他们(=

1 个答案:

答案 0 :(得分:4)

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

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

你需要做的是改变深度优先搜索,使其深入N个节点(即,如果你是N深,不要生成新的节点),并用增加的N调用它。你不要存储任何超过N的值以及你为DFS做的任何事情。

迭代伴随着迭代地增加搜索深度。如果分支因子大于2,则性能可以令人惊讶地好,因为在这种情况下,深度限制DFS的大部分成本处于达到的最低水平。

首先学习迭代深化DFS,然后将其应用于IDA *。我在十五年前读过关于这些搜索的早期Korf论文,并且不记得IDA *如何运作得很好,但你的主要问题是你不了解迭代深化。