Algorithm 为图构建BFS树的复杂性是什么?

Algorithm 为图构建BFS树的复杂性是什么?,algorithm,time-complexity,Algorithm,Time Complexity,我知道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,当且仅当节点i连接到树中的节点j(以及根的特殊标记) 因此,在BFS期间,当nodev“发现”nodeu,你只需要做

我知道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,当且仅当节点i连接到树中的节点j
(以及根的特殊标记)


因此,在BFS期间,当node
v
“发现”node
u
,你只需要做
a[u]=v
,这是在固定的时间内完成的,并且是精确的
n
次,因此总的复杂度仍然是
O(n+m)

你说当node
v
发现node
u
时,我必须添加
a[v]=u
。不应该是相反的吗?同一节点可以发现更多节点。是打字错误还是我遗漏了什么?还有一个问题。如果我们想将树构建为“树”而不是数组,该怎么办?我的意思是,如果我有一个真正的树结构,我可以从深度上判断节点离源有多远。在更糟糕的情况下,建造这样一个结构要花多少钱?它还是一样的。最简单的解决方案:从数组中构建一棵树可以在
O(n)
中完成,因此在BFS中构建一棵树,然后构建一棵树就是
O(n+m)
。更有效的方法是直接构建它,但在big-O表示法方面是相同的。