Dijkstra算法的运行时分析,我得到O(Vlog(V)+ VE)

时间:2014-02-27 02:38:27

标签: time-complexity dijkstra

我正在尝试确定dijkstra算法的运行时间 最小优先级队列(使用Fibonacci堆实现)

代码 enter image description here

分析: 我知道对于Fibonacci堆插入是Decrease / Insert Key是O(1)并且提取min它是O(log(n))

第1行到第3行:每个顶点的运行时间为O(V)

第4行的循环取O(V),但ExtractMin占用O(log(V)), 对于每一条边

,也是从第6-7行到其O(E)的for循环

因为for循环在while循环中, 我会有V(log(V)+ E)

所以我会得到O(V + V log(V)+ V E),它归结为O(V log(V)+ V E)< / p>

但是大多数文章表明它是O(V * log(V)+ E),是因为E> V还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

每个顶点最多被ExtractMin拉出一次,因此内部for循环(在while循环的所有迭代中)将最多选择一条边;因此,E,而不是V * E,术语。