深度优先树搜索可能会陷入无限循环,这就是它不“完整”的原因。图搜索跟踪它已经搜索过的节点,因此它可以避免无限循环。
“冗余路径”是从同一起始节点通向同一结束节点的不同路径。图搜索仍然会探索所有这些冗余路径,但是一旦它到达它之前访问过的节点,它就不会继续前进,而是会备份并寻找更多它还没有尝试过的路径。
这与“无限循环”不同,“无限循环”是从节点返回自身的路径。
作为对您的评论的回应,请查看您刚刚发布的报价:
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 个分支。这些分支中的每一个都通向同一个节点,该节点有一条很长的路径从它引出。树搜索将遵循该长路径两次,一次针对通向它的 2 个分支中的每一个。这就是作者要指出的。