Algorithm 深度优先vs广度优先

Algorithm 深度优先vs广度优先,algorithm,tree,graph-algorithm,depth-first-search,breadth-first-search,Algorithm,Tree,Graph Algorithm,Depth First Search,Breadth First Search,根据我的经验,DFS似乎比BFS更受欢迎。例如,DFS的内存效率更高。但我只想知道什么时候BFS会超过DFS?在什么特定情况下,我们应该选择BFS而不是DFS?BFS的优势在于它是按级别进行的,因此,如果您有理由相信您要查找的是顶部节点中的任何内容,BFS可能会更好。如果您确定它在底部,DFS可能会更好,因为它不需要任何特定的级别 我记得读过的一个例子是,在查找医疗记录时,您更可能需要更新的医疗记录,而旧的医疗记录可能位于树的底部。对于任意图形,没有这样的方法来证明哪一个更好,因为在某些情况下,

根据我的经验,DFS似乎比BFS更受欢迎。例如,DFS的内存效率更高。但我只想知道什么时候BFS会超过DFS?在什么特定情况下,我们应该选择BFS而不是DFS?

BFS的优势在于它是按级别进行的,因此,如果您有理由相信您要查找的是顶部节点中的任何内容,BFS可能会更好。如果您确定它在底部,DFS可能会更好,因为它不需要任何特定的级别


我记得读过的一个例子是,在查找医疗记录时,您更可能需要更新的医疗记录,而旧的医疗记录可能位于树的底部。

对于任意图形,没有这样的方法来证明哪一个更好,因为在某些情况下,DFS在其他BFS上更有效。但对于树木,你当然可以选择其中一种。例如,在遍历二叉树时,DFS所需的堆栈空间是
O(logN)
,而BFS所需的堆栈空间是
O(N)
。但是如果您使用的是稀疏图,那么BFS可能比DFS使用更少的空间。这两种方法的平均时间复杂度相同,但如果在距离根更高的深度处存在解决方案,或者在距离根更近的深度处存在解决方案,或者如果有一个无限图(每个顶点的次数有限),并且解决方案保证存在,则可能会发现DFS更可取,BFS保证找到它,而DFS可以很好地运行无限time@DmitryBychenko无限图不适合任何物理上存在的机器,所以这几乎不值得考虑。@delnan好吧,从技术上讲,这是真的,你不可能有一个真正的无限图,但是您可以拥有非常大的图,而不必存储每个节点和边。例如,单元格网格是一个可以以非常稀疏的方式存储的有效“无限”图的好例子。所以我不同意这是一个不值得考虑的案例。@Kyle但如果它是有限的,BFS和DFS都将终止,而哪一个终止得更快取决于起始点和目标点的确切位置。一个巨大但有限的图不会自动转化为BFS的优势。对不起,如果这个问题太广泛的话。但既然每个人都知道我的真正意思,而且他们也给出了我需要的答案,我认为没有必要修改这个问题。你怎么认为?