【发布时间】:2015-07-14 00:12:59
【问题描述】:
我很难理解为什么带堆的 Dijkstra 算法的复杂性是 O( (m + n)*log(n) ),其中 m 是边数,n 是顶点数。
我的理解是:
现在我知道一个人必须做 n 删除分钟。 (每个 remove min 从堆中获取 log(n))。
然后必须执行 m 更新密钥。 (每个更新键需要 log(n))。
因此答案。我的概念清楚吗?否则您能否解释一下如何获得 Dijkstra 算法的时间复杂度。
【问题讨论】:
-
带堆的 Dijsktra 的复杂性是 O(m+ n*log(n)) (参见en.wikipedia.org/wiki/Dijkstra%27s_algorithm),而不是 O((m+n) log(n),所以你的推理似乎是正确的。
-
我没有使用斐波那契堆。
-
是的,您的分析对于二进制堆来说是正确的。
标签: algorithm time-complexity dijkstra