我使用的伪代码:
for all V vertices: visited[n]=0
pick any vertex r from graph and set visited[r]=1
For all edges e incident to r
PQ.insert()
while(PQ is not empty)//line 1
f=PQ.min()//f(r,s) is such that visited[s]=0
for all edges e(s,t) incident to s//line 2
if(visited[t]==0)
PQ.insert(e);//line 3
else
PQ.delete(e);//line 4
visited[s]=1;
end while;
根据我的理解:
V-1
次。2E
次对于每一行2:
第3行和第4行花费log E
时间,因为我们逐个添加/删除PQ
的所有边缘。
总计time
= V-1+2E.logE
= E.log E
但是这本书说它是E.logV
,你能解释一下为什么会这样吗?
答案 0 :(得分:4)
O(log(V))和O(log(E))是相同的。
答案 1 :(得分:1)
对于s
的所有边e(s,t)
节点s
最多可以有多少条边?
最多V-1
。因此,PQ操作具有O(logV)时间复杂度。