我正在阅读Stuart Russell 和 Peter Norvig的《人工智能:一种现代方法》(第 4 版)一书,遇到了关于深度优先搜索的这句话(第 79 页,第 12 行):
对于非循环状态空间,它最终可能会通过不同的路径多次扩展相同的状态,但会(最终)系统地探索整个空间。
我的问题是:这怎么可能?你能告诉我一些例子吗?
我正在阅读Stuart Russell 和 Peter Norvig的《人工智能:一种现代方法》(第 4 版)一书,遇到了关于深度优先搜索的这句话(第 79 页,第 12 行):
对于非循环状态空间,它最终可能会通过不同的路径多次扩展相同的状态,但会(最终)系统地探索整个空间。
我的问题是:这怎么可能?你能告诉我一些例子吗?
首先,请注意要扩展的动词在这种情况下具有特定含义:当您扩展节点/状态时, 你尝试每一个动作可从,以及这些动作中的每一个导致另一个状态。
其次,如果图是DAG,那么边有方向,没有圈;所以,如果你沿着边缘走,你将永远不会回到你已经在的节点。但是,这不足以理解该陈述以及为什么或何时为真。
第三,仅当您使用深度优先搜索的树搜索版本时,该陈述才是正确的,即您不跟踪您已经探索过的节点。换句话说,您不使用graph search,它是一种树搜索,但它会跟踪一个名为explored set(或closed list)的集合中已经展开的节点,以避免再次展开它们。所以,在这里,如果你探索了一个节点/状态,您已将其添加到explored set,因此您不会再次扩展它。
那么,为什么在 DFS 的树搜索版本中可以多次展开一个节点呢?好吧,你没有跟踪你已经扩展的节点,所以如果你从另一个路径再次遇到它,你可能会再次扩展它。鉴于它是一个 DAG(并假设它是有限的),那么您最终将尝试所有可能的路径,因此您会找到目标。
现在,这是一个在 DFS 的树搜索版本中多次展开节点的示例。
假设我们有这个搜索空间,你从哪里开始目标是.
A -> B -> C -> D
A -> C -> D
A -> E
如果节点的深度相同,假设您按字母顺序展开它们;所以,在上面的搜索空间,你先展开接着, 因为来之前(在英文字母表中)。
现在,注意我们可以直接去从或者我们可以去首先去.有一个孩子。当你展开,基本上,您尝试从. 在这种情况下,只有一个动作,即去.
所以,在不跟踪你扩展的情况下, 当你从, 在你从第一次,您将再次尝试扩展. 在图搜索中,这是不可能的,因为我们第一次展开,我们将它添加到explored set中,所以我们不再展开它。