在时间O(| E | + | V |)中查找有向图的顶点可到达的所有顶点

时间:2015-04-19 16:36:58

标签: algorithm graph graph-algorithm

其中| E |表示边数| V |顶点的数量。

我的想法是在给定顶点上使用深度优先搜索来查找从中可以到达的所有顶点。然而,就我的理解而言,仅从一个顶点执行深度优先搜索需要O(1 + out-degree(u))时间,其中u是所讨论的顶点。

假设深度优先搜索是答案,为什么我必须执行完整的O(| V | + | E |)搜索?

2 个答案:

答案 0 :(得分:2)

如果你只执行DFS的一个步骤,那么它是O(1 + outdegree(v)),然而,它只能获得一步可以从v到达的顶点,但不是你的所有顶点可能会到达。

考虑递归,为了检索所有可到达的顶点,您应该对每个到达的顶点执行另一个递归DFS搜索。在最坏的情况下,您将到达所有顶点,因此您将为每个顶点提供O(1 + outdegree(v))的总和,因此您将遍历图的所有边并获得O(| V | + | E |)

答案 1 :(得分:1)

因为

(1)您必须不仅在初始顶点中执行深度优先搜索,而且还必须在与其直接相连的所有顶点中以及在这些顶点连接到的所有顶点中执行深度优先搜索,依此类推。

(2)在最坏的情况下,所有顶点都可以从初始顶点到达,它相当于执行完整的DFS。

相关问题