在完全无向图中,BFS 遍历是否与 DFS 相同?

问题描述

我有一项作业要求我计算给定完整无向图的最短路径。问题给出一个完整的无向图,基本算法(BFS和DFS)可以提供最短路径。我想知道使用 BFS 或 DFS 是否会产生相同的输出,因为它是一个完整的无向图

解决方法

我假设图表是用非负权重加权的

  • 最短路径在未加权的完全图中是微不足道的
  • 在无向图中,负权重边将创建负权重循环。此类图中没有最短路径,因为您始终可以通过添加负循环来改进它。

我还假设您正在寻找两个给定顶点之间的最短路径,因为这是 DFS 和 BFS 都真正适用的唯一最短路径任务。

  • 要查找所有单源最短路径,您可以使用 Dijkstra
  • 要找到所有对的最短路径,您可以使用 Floyd-Warshall

如果图是有限的,DFS 和 BFS 都会给你最短路径。如果有多个最短路径,DFS 和 BFS 都可以完成,以便它们返回所有最短路径。否则,它们不能保证为您提供相同的最短路径 - 即使对于同一算法的不同实现也不能保证,它可能因边的顺序而异。

DFS 和 BFS 都将具有可怕的时间复杂度 O(n!),因为它们将遍历整个问题空间,找到从源到目标的所有可能路径。此外,BFS 将具有更大的空间复杂度(再次为 O(n!))。

对于 DFS 和 BFS,通过保持“当前最佳”和修剪无法击败它的分支(因为它们的长度已经更糟),这种复杂性在一般情况下可以有所改善。但是您仍然无法赶上更合适的算法的速度,例如 Dijkstra 或 A*