【问题标题】:Best algorithm to determine if an undirected graph is a tree确定无向图是否为树的最佳算法
【发布时间】:2011-12-03 12:01:01
【问题描述】:

判断无向图是否为树的最佳算法的时间复杂度是多少?

我们可以说 Big-oh(n) 有 n 个顶点吗?

【问题讨论】:

    标签: graph-algorithm


    【解决方案1】:

    是的,它是 O(n)。有向图中的深度优先搜索有 3 种类型的非树边 - 交叉、后向和前向。

    对于无向的情况,唯一的非树边是后边。因此,您只需要搜索后边缘。

    简而言之,选择一个起始顶点。遍历并继续检查遇到的边缘是否是后边缘。如果你找到 n-1 个树边而没有找到后边,然后用完边,你就是金子。

    (澄清一下 - back edge 是已经遇到另一端的顶点的地方 - 由于无向图的属性,另一端的顶点将是当前节点的祖先正在构建的树。)

    【讨论】:

    • thnx.. 我们也可以在 O(n) 时间内使用 BFS 来做到这一点
    • 可以,但 BFS 可能会更慢,因为它找不到周期那么快。
    【解决方案2】:

    是的,它是 O(n)。

    选择一个起始节点,进行深度优先遍历。如果您多次访问一个节点,它就不是一棵树。

    【讨论】:

    • Thnx anthony...我们也可以用 O(n) 时间的 BFS 来做到这一点
    • 是的,但是深度优先更好,因为它会更快地找到周期。
    • 还要验证所有节点都被访问过,否则图可能是森林。
    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    相关资源
    最近更新 更多