Prim的算法时间复杂度是如何使用优先级Q的ElogV?

时间:2009-08-22 09:46:08

标签: algorithm complexity-theory big-o prims-algorithm

我使用的伪代码:

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;

根据我的理解:

  • 第1行:执行V-1次。
  • 第2行:所有顶点的度数之和次数...... .. 2E

对于每一行2: 第3行和第4行花费log E时间,因为我们逐个添加/删除PQ的所有边缘。

总计time = V-1+2E.logE = E.log E

但是这本书说它是E.logV,你能解释一下为什么会这样吗?

2 个答案:

答案 0 :(得分:4)

O(log(V))和O(log(E))是相同的。

  • E最多为V 2
  • log(V 2 )= 2 * log(V)
  • 是O(log(V))

答案 1 :(得分:1)

  

对于s

的所有边e(s,t)

节点s最多可以有多少条边?
最多V-1。因此,PQ操作具有O(logV)时间复杂度。