我正在尝试确定dijkstra算法的运行时间 最小优先级队列(使用Fibonacci堆实现)
代码
分析: 我知道对于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还是我做错了什么?
答案 0 :(得分:1)
每个顶点最多被ExtractMin拉出一次,因此内部for循环(在while循环的所有迭代中)将最多选择一条边;因此,E,而不是V * E,术语。