【问题标题】:Which is the complexity to build a BFS tree for a graph?为图构建 BFS 树的复杂性是什么?
【发布时间】:2012-07-09 14:18:06
【问题描述】:

我知道 BFS 需要 O(n+m) 时间,其中 n 是节点,m 是弧。

在执行 BFS 的同时构建树怎么样?

只要在最坏的情况下树完全不平衡,它是否会添加另一个 n?

【问题讨论】:

    标签: algorithm time-complexity


    【解决方案1】:

    不完全确定我是否在关注,但如果是:

    它是否增加了另一个 n

    你的意思是复杂度将是O(n+m+n),注意O(n+m+n) = O(n+m),所以这里没有真正的问题。

    树的构建可以在O(n+m) 中完成,因为它可以表示为数组a[1,...,n],其中a[i] = j if and only if node i is connected to node j in the tree(以及根的特殊标记)

    所以,在 BFS 期间,当节点 v“发现”节点 u 时,您只需要做 a[u]=v,这是在恒定时间内完成的,并且正好完成 n 次,所以总共复杂性仍然存在O(n+m)

    【讨论】:

    • 你说当节点v发现节点u我必须添加a[v] = u。不应该反过来吗?同一个节点可以发现更多节点。是错字还是我遗漏了什么?
    • 还有一个问题。如果我们想将树构建为“树”而不是数组怎么办?我的意思是,如果我有一个真正的树结构,我可以通过查看其深度来确定节点与源的距离。在最坏的情况下建造这样一个结构的成本是多少?
    • 还是一样。最简单的解决方案:从数组构建树可以在O(n)中完成,因此在BFS期间构建然后构建树是O(n+m)。更有效的方法是直接构建它,但在大 O 表示法方面是相同的。
    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2012-07-13
    • 2011-09-03
    • 2014-08-06
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多