【发布时间】:2014-12-20 06:51:09
【问题描述】:
根据我的理解,我使用下面给出的邻接表将 Dijkstra 算法的时间复杂度计算为大 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)。为什么?
【问题讨论】:
标签: algorithm graph big-o time-complexity dijkstra