Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么深度优先搜索会受到无限循环的影响?_Algorithm_Search_Depth First Search_Breadth First Search - Fatal编程技术网

Algorithm 为什么深度优先搜索会受到无限循环的影响?

Algorithm 为什么深度优先搜索会受到无限循环的影响?,algorithm,search,depth-first-search,breadth-first-search,Algorithm,Search,Depth First Search,Breadth First Search,我已经读过很多次了,但我的脑海里一直萦绕着这个疑问。在很多文章中都提到DFS可能陷入无限循环中 据我所知,通过跟踪访问的节点,可以很容易地消除这种限制。事实上,在我读过的所有书籍中,这张小小的支票是DFS的一部分 那么为什么“无限循环”被称为DFS的一个缺点呢?是否只是因为原始DFS算法没有对访问的节点进行此检查?请解释。(1)在[人工智能上经常使用的]图形搜索算法中,DFS的主要优势是空间效率。这是其在BFS上的主要优势。但是,如果您跟踪访问的节点,您将失去这一优势,因为您需要将所有访问的节点

我已经读过很多次了,但我的脑海里一直萦绕着这个疑问。在很多文章中都提到DFS可能陷入无限循环中

据我所知,通过跟踪访问的节点,可以很容易地消除这种限制。事实上,在我读过的所有书籍中,这张小小的支票是DFS的一部分

那么为什么“无限循环”被称为DFS的一个缺点呢?是否只是因为原始DFS算法没有对访问的节点进行此检查?请解释。

(1)在[人工智能上经常使用的]图形搜索算法中,DFS的主要优势是空间效率。这是其在BFS上的主要优势。但是,如果您跟踪访问的节点,您将失去这一优势,因为您需要将所有访问的节点存储在内存中。不要忘记,访问节点的大小会随着时间的推移急剧增加,对于非常大/无限的图,可能无法放入内存中

(2) 有时DFS可能位于无限分支中[在无限图中]。无限分支是一个不结束的分支[总是有“更多的子”],也不会让您到达目标节点,因此对于DFS,您可能会继续无限扩展此分支,并“错过”通向目标节点的好分支

奖金:
您可以通过使用DFS和BFS的组合来克服DFS中的此缺陷,同时保持相对较小的内存大小:

(1)在[人工智能上经常使用的]图形搜索算法中,DFS的主要优势是空间效率。这是其在BFS上的主要优势。但是,如果您跟踪访问的节点,您将失去这一优势,因为您需要将所有访问的节点存储在内存中。不要忘记,访问节点的大小会随着时间的推移急剧增加,对于非常大/无限的图,可能无法放入内存中

(2) 有时DFS可能位于无限分支中[在无限图中]。无限分支是一个不结束的分支[总是有“更多的子”],也不会让您到达目标节点,因此对于DFS,您可能会继续无限扩展此分支,并“错过”通向目标节点的好分支

奖金:

您可以通过使用DFS和BFS的组合来克服DFS中的此缺陷,同时保持相对较小的内存大小:

传统的DFS算法确实可以跟踪节点。局部搜索算法不跟踪状态,表现为健忘症。所以我认为循环主要是指一个无限分支(一个具有无限可能状态的分支)。在这种情况下,DFS只会下降并过于集中于一个分支。

传统的DFS算法会跟踪节点。局部搜索算法不跟踪状态,表现为健忘症。所以我认为循环主要是指一个无限分支(一个具有无限可能状态的分支)。在这种情况下,DFS只会下降,并且过于关注一个分支。

对于问题#1:我想知道仅保留当前正在搜索的分支的节点是否也能避免DFS中的循环?无论何时选择要展开的节点,如果它在该列表中,我们都可以跳过它。这样,我们不需要跟踪所有访问的节点,因此不会有太多开销。对吗?对于问题2:我同意这是DFS的主要缺点之一(尽管它更大的缺点确实是它的“不知情”探索,但我知道你没有提到这一点,因为它与问题无关。只是对好奇的读者说).对于问题#1:我想知道仅保留当前正在搜索的分支的节点是否也能避免DFS中的循环?无论何时选择要展开的节点,如果它在该列表中,我们都可以跳过它。这样,我们不需要跟踪所有访问的节点,因此不会有太多开销。对吗?对于问题2:我同意这是DFS的主要缺点之一(尽管它更大的缺点确实是它的“不知情”探索,但我知道你没有提到这一点,因为它与问题无关。只是为了好奇的读者说)。