【发布时间】:2019-07-31 17:44:07
【问题描述】:
在CRLS的书中,对Dijkstra算法的分析如下:
你需要使用堆多少次?一次从堆中拉出每个节点(即 CRLS 书中的 Extract-Min)--- O(N);并且每次查看边缘时----O(E),您可能需要更改距离(即CRLS书中的Decrease-Key),这意味着修复堆顺序。每个堆操作都需要 O(logN) 的工作。
因此,总时间复杂度:O((N + E)logN),如果所有顶点都可以从源到达,则为 O(ElogN)。
我的问题是: 如果所有顶点都可以从源到达,为什么复杂度变成 O(ElogN)?为什么我们可以忽略 O((N + E)logN) 中的 O(NlogN) 部分?
【问题讨论】:
-
O(E) * O(log N) = O(E log N) -
@Lrrr 感谢您的评论。 O((N+E)logN) 中的 O(NlogN) 部分去哪了?
-
有人知道吗?请帮忙!
-
O(N log N) 小于 O(E log N) 因为 E 在 O(N) 和 O(N^2) 之间所以我们可以忽略 O(N log N)跨度>