【发布时间】:2012-07-09 14:18:06
【问题描述】:
我知道 BFS 需要 O(n+m) 时间,其中 n 是节点,m 是弧。
在执行 BFS 的同时构建树怎么样?
只要在最坏的情况下树完全不平衡,它是否会添加另一个 n?
【问题讨论】:
我知道 BFS 需要 O(n+m) 时间,其中 n 是节点,m 是弧。
在执行 BFS 的同时构建树怎么样?
只要在最坏的情况下树完全不平衡,它是否会添加另一个 n?
【问题讨论】:
不完全确定我是否在关注,但如果是:
它是否增加了另一个 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 表示法方面是相同的。