【问题标题】:Question about breadth-first completeness vs depth-first incompleteness关于广度优先完整性与深度优先完整性的问题
【发布时间】:2011-07-01 08:58:38
【问题描述】:

根据 AIMA(人工智能:现代方法)中的 Norvig,深度优先算法并不完整(不会总是产生解决方案),因为在某些情况下,正在下降的子树将是无限的。

另一方面,如果分支因子不是无限的,则称广度优先方法是完整的。但这不是与 DFS 中子树无限的情况相同的“事情”吗?

如果树的深度是有限的,就不能说 DFS 是完整的吗?那么 BFS 是完整的而 DFS 是不完整的,因为 BFS 的完整性依赖于分支因子是有限的!

【问题讨论】:

    标签: depth-first-search breadth-first-search


    【解决方案1】:

    一棵树可以是无限的而没有无限的分支因子。例如,考虑魔方的状态树。给定立方体的配置,移动次数是有限的(我相信是 18 次,因为移动包括选择 9 个“平面”中的一个并在两个可能的方向之一上旋转它)。然而,树是无限深的,因为它完全有可能例如只来回交替旋转同一平面(从不取得任何进展)。为了防止 DFS 这样做,通常会缓存所有访问过的状态(有效地修剪状态树) - 正如您可能知道的那样。但是,如果状态空间太大(或者实际上是无限的),这将无济于事。

    我没有深入研究过人工智能,但我假设说 BFS 是完整的而 DFS 不完整的理由(毕竟,完整性只是在某个地方定义的一个术语)是无限深的树比具有无限分支因子的树(因为具有无限分支因子意味着您有无限数量的选择,我认为这并不常见 - 游戏和模拟通常是离散的)。即使对于有限的树,BFS 通常也会表现得更好,因为 DFS 很可能从错误的路径开始,在到达目标之前探索树的大部分。尽管如此,正如您所指出的,在有限树中,DFS 最终找到解决方案(如果存在)。

    【讨论】:

    • 是的,我自己也想过游戏中具有无限分支因子的树的稀有性,但书中并没有明确解释。我认为这些算法的完整性与它们应用的上下文无关,因为它们是“不知情的”。无论“通常游戏树没有无限分支因子”这一事实,BFS 都是完整的。我肯定错过了什么。感谢您的回复!
    • 我同意关于“不知情”搜索算法的陈述不应以算法无法检测到的图形属性为条件的观点。但是,我想“所有图都有一个有限的分支因子”是书中隐藏的前提。 these slides 中将不知情的搜索描述为“我们所知道的就是如何生成新状态并识别目标状态” - 假设(甚至定义)生成器总是产生是合理的相邻状态的有限序列。
    【解决方案2】:

    DFS 不能陷入循环(如果我们有一个打开和关闭状态的列表)。该算法并不完整,因为它没有在无限空间中找到解决方案,即使解决方案的深度d 远低于无穷大。

    想象一个奇怪定义的状态空间,其中每个节点的后继数与斐波那契数列中的后续数相同。因此,它是递归定义的,因此是无限的。我们正在寻找节点 2(图中标记为绿色)。如果 DFS 从树的右分支开始,则需要无数个步骤来验证我们的节点是否不存在。因此它不完整(它不会在合理的时间内完成)。 BFS 将在第 3 次迭代中找到解决方案。

    魔方的状态空间是有限的,它很大,但也是有限的(人类陷入循环但 DFS 不会重复相同的动作两次)。 DFS 会找到非常低效的方法来解决它,有时这种解决方案是不可行的。通常我们认为最大深度是无限的,但我们的资源(内存)总是有限的。

    【讨论】:

      【解决方案3】:

      深度优先搜索的属性很大程度上取决于图搜索还是 使用树搜索版本。图搜索版本,避免重复状态和冗余 路径,在有限状态空间中是完整的,因为它最终会扩展每个节点。 另一方面,树搜索版本并不完整——例如,在图 3.6 中 算法将永远遵循 Arad–Sibiu–Arad–Sibiu 循环

      来源:人工智能:一种现代方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 2011-05-12
        相关资源
        最近更新 更多