非常感谢老师详尽的回答!
在算法与数据结构课程中,您在讲解lazy prim算法(存边,未优化)时间复杂度时,外层循环 while(!pq.isEmpty()) ,循环次数为边数E。内层包括两个部分:
1. 从堆中取出最小的边 pq.extractMin(), 时间复杂度为logE
2. visit 函数,把所有的visit对邻边的遍历合在一起,也是E次(邻接矩阵V^2次),每次执行pq.insert()函数,复杂度为logE。
综合起来是 O(ElogE + ElogE ), 也就是 O(ElogE)。
(E+V)logE是如何得出的呢?我是在哪里理解的不到位?
对于优化过的lazy prim,用最小索引堆实现。外层循环优化为V次,内层
1. 对堆的操作extractMin优化为logV
2. visit 对所有的顶点的临边进行遍历,总共对索引堆的操作(insert 和 change )应该是小于E次的。但也是E这个级别。所以复杂度为(E+V)logV, 综合复杂度为ElogV。
您的回答中提到,没有优化的prim算法,复杂度可以到O(V*E),对于临界矩阵表示的稠密图,e=v^2。可以选择,O(E^3)。但是,题目中是临界表,好像没有正确的答案吧。