我引用了《人工智能:现代方法:》
深度优先搜索的特性在很大程度上取决于使用的是图搜索还是树搜索版本。图搜索版本避免了重复状态和冗余路径,在有限的状态空间中是完整的,因为它最终会扩展每个节点。另一方面,树搜索版本是notcomplete[…]。深度优先树搜索可以在没有额外内存成本的情况下进行修改,以便根据从根到当前节点的路径上的状态检查新状态;这避免了有限状态空间中的无限循环,但不能避免冗余路径的扩散。
我不明白为什么图搜索是完整的,而树搜索不是,作为一棵树是一个特定的图。
此外,我不清楚"无限循环"one_answers"冗余路径"之间的区别。。。
有人能向我解释一下吗?
ps。对于那些有这本书的人来说,它是第86页(第3版)。
深度优先树搜索可能会陷入无限循环,这就是为什么它不是"完整的"。图搜索会跟踪已经搜索过的节点,因此可以避免跟随无限循环。
"冗余路径"是指从同一开始节点到同一结束节点的不同路径。图形搜索仍然会探索所有这些冗余路径,但一旦它到达以前访问过的节点,它就不会再继续了,而是会备份并寻找更多尚未尝试的路径。
这与"无限循环"不同,后者是从节点返回自身的路径。
作为对您评论的回应,请查看您刚刚发布的报价:
Depth-first tree search can be modified at no extra memory cost so that it checks new states against those on the path from the root to the current node.
因此,虽然深度优先树搜索确实会跟踪从根到当前节点的路径,但为了避免无限循环,它需要在每次访问新节点时对该路径进行线性搜索。如果你编写了一个深度优先树搜索的实现,但没有进行检查,它可能会进入一个无限循环。
你是对的,书中所说的"冗余路径的扩散"与完整性无关。它只是指出了图搜索和树搜索之间的区别。因为树搜索只跟踪当前路径,所以它可以在同一搜索中多次在同一路径上运行(即使进行了我刚才提到的检查)。
假设你的根节点有2个分支。这些分支中的每一个都指向同一个节点,该节点有一条从中引出的长路径。树搜索将跟随该长路径两次,两个分支中的每个分支一次。这就是作者所指出的。
DFS不完整(在树搜索中)。但是,如果您跟踪访问的节点,它就会变得完整(在图形搜索中)。
- 让我们明确完整性的含义
如果一个算法是完整的,这意味着如果至少有一个解决方案则该算法被保证在有限域中找到一个解时间量
-
我们需要区分树搜索和图搜索。如《人工智能:现代方法》第3.3节或第77页所示,唯一的区别是图搜索有一个集合来存储探索的节点
-
最后,我们可以找到答案。
- 在树搜索(不存储探索的节点)中,由于我们不知道当前节点是否被探索,DFS可能会再次探索它(一次又一次…),这将永远循环->无限时间,不完整
- 在图搜索(存储已探索的节点)中,任何搜索算法都将结束->有限时间,完整