【问题标题】:Dijkstra Algorithm Time ComplexityDijkstra 算法时间复杂度
【发布时间】:2021-04-18 06:19:36
【问题描述】:

我是 Dijkstra 算法的新手。

我的问题是:对于具有 n 个节点和 m 个边的无向图 G,Dijkstra 算法找到最短路径的时间复杂度是 o((n+m)logn)。但是如果G是连通的,为什么这个时间复杂度也可以表示为o(mlogn)呢?

干杯

【问题讨论】:

  • 你用过 little-o,但你的意思是 big theta 吗?

标签: algorithm


【解决方案1】:

如果它没有连接,比如说只有一条边(m=1),那么它可能是o(nlgn)。这就是为什么在一般情况下它是 o((m+n)lgn)。

如果是连通的,应该有一棵树连接整个图(长度为n-1),所以m至少为n-1:(m>=n-1)。因此,对于小 O 表示法(小 O:f 渐近地由 g 主导),我可以将 n 替换为 m: o((m+1+m)lgn) "=" o(mlgn)

【讨论】: