【问题标题】:why DFS is not optimal but BFs is optimal为什么 DFS 不是最优的,但 BFs 是最优的
【发布时间】:2014-01-21 16:41:57
【问题描述】:

这个问题我想了很久,但从来没有得到合理的答案:

通常在人工智能课程中,当涉及到搜索时,总是说 BFS 是最优的,但 DFS 不是,但我可以想出很多例子,表明使用 DFS 我们甚至可以更快地得到答案。那么有人可以解释一下吗?我错过了什么吗?

【问题讨论】:

  • 在时间复杂度(执行性能)或空间复杂度(内存使用)方面最佳?或者在输出的实际质量中,最好的解决方案很难计算(例如在贪心算法的情况下)?
  • @barakmanos 通常,在人工智能的背景下,最优性是指解决方案,而不是策略。我想这就是 OP 的意思。

标签: artificial-intelligence


【解决方案1】:

“产生最优路径”中的最优,而不是“可能是最快的算法”。在状态空间中搜索目标路径时,DFS 可能会产生比 BFS 更长的路径。请注意,仅当动作未加权时,BFS 才是最佳的;如果不同的动作有不同的权重,你需要像 A* 这样的东西。

【讨论】:

  • 感谢您的出色回答。这个场景怎么样:目标在树的最左边的分支中。在这种情况下哪一个是最佳的?
  • @HamedMinaee:如果您知道目标在树的最左侧分支中,则根本不需要搜索算法。每次只需执行列表中的第一个操作。这不是特别常见的情况,因此针对这种情况进行优化没有用处。
  • 您需要特定的启发式方法才能使用 A*。如果找不到,统一成本搜索(修改后的 BFS)可能会有所帮助。
  • @StefanoSanfilippo:嗯,你通常至少可以得到 something 以用作启发式方法。如果你已经写了 A* 并且你不能想出一个启发式,“我们还在那里吗?”函数将为您提供一点开销的 UCS。
【解决方案2】:

这是因为最优策略是指返回的解决方案使效用最大化的策略。

关于这一点,没有任何保证 DFS 找到的第一个解决方案是最优的。 BFS 在一般意义上也不是最佳的,所以你的陈述是错误的。

这里的重点是保证某种搜索策略将总是返回最佳结果。在特定情况下,任何策略都可能是最好的,但通常(尤其是在 AI 中),你不知道你在什么具体情况下,最多你对那个情况有一些假设。

但是,DFS 是最优的,当搜索树是有限的时,所有操作成本都相同且所有解决方案的长度都相同。不管这听起来如何限制,有一类重要的问题可以满足这些条件:CSP(约束满足问题)。也许你想到的所有例子都属于这个(相当常见的)类别。

【讨论】:

    【解决方案3】:

    您可以参考我对this 问题的回答,其中我解释了为什么 DFS 不是最优的以及为什么 BFS 不是解决无信息状态空间搜索问题的最佳选择。

    【讨论】:

      【解决方案4】:

      您可以参考下面的链接,它考虑了一个树的例子,并用这两种方法解决了它。 link

      【讨论】:

      • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      相关资源
      最近更新 更多