我引用Artificial Intelligence: A Modern Approach:
深度优先搜索的属性很大程度上取决于是使用图搜索还是树搜索版本。避免重复状态和冗余路径的图搜索版本在有限状态空间中完成,因为它最终会扩展每个节点。另一方面,树搜索版本不完成[...]。可以在没有额外内存成本的情况下修改深度优先树搜索,以便它检查新状态与从根到当前节点的路径上的状态;这避免了有限状态空间中的无限循环,但不能避免冗余路径的扩散。
我不明白图搜索是如何完成的,树搜索不是,树是一个特定的图。
此外,我没有明确区分“无限循环”和“冗余路径”......
有人可以向我解释一下吗?
PS。对于有这本书的人来说,这是第86页(第3版)。
答案 0 :(得分:11)
深度优先树搜索可能陷入无限循环,这就是它不“完整”的原因。图搜索会跟踪它已搜索过的节点,因此可以避免跟随无限循环。
“冗余路径”是从同一起始节点到同一端节点的不同路径。图搜索仍然会探索所有这些冗余路径,但是一旦它到达之前访问过的节点,它将不会再进一步,但会备份并寻找尚未尝试的更多路径。
这与“无限循环”不同,后者是从节点返回自身的路径。
在回复您的评论时,请查看您刚发布的报价:
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个分支。这些分支中的每一个都通向相同的单个节点,该节点具有从其引出的长路径。树搜索将沿着长路径两次,对于通向它的两个分支中的每个分支一次。这就是作者指出的内容。
答案 1 :(得分:1)
DFS 不完整(在树搜索中)。但是,如果您跟踪访问过的节点,它就会变得完整(在图搜索中)。
如果一个算法是完整的,则意味着如果至少有一个解 存在那么算法保证在有限的范围内找到解 时间。
我们需要区分树搜索和图搜索。如《人工智能:现代方法》中的第 3.3 节或第 77 页所示,唯一的区别是图搜索有一组用于存储探索的节点。
终于可以找到答案了。