据我了解,我使用下面给出的邻接表将Dijkstra算法的时间复杂度计算为big-O表示法。它没有按预期的方式出现,这使我逐步了解了它。
- 每个顶点可以连接到(V-1)个顶点,因此每个顶点的相邻边数为V-1。假设E表示连接到每个顶点的V-1边。
- 在最小堆中查找和更新每个相邻顶点的权重为O(log(V))+ O(1)或
O(log(V))
。 - 因此,从上面的步骤1和步骤2开始,更新顶点的所有相邻顶点的时间复杂度为E *(logV)。或
E*logV
。 - 因此,所有V个顶点的时间复杂度为V *(E * logV)即
O(VElogV)
。
但是Dijkstra算法的时间复杂度为O(ElogV)。为什么?