Dijkstra在二进制堆密集图上的线性运行时间

时间:2012-02-23 12:36:55

标签: algorithm big-o graph-algorithm dijkstra shortest-path

第一:Dijkstras最短路径算法的一般运行时间是

Dijkstra generalrunning time

其中m是边数,n是顶点数

:预期的减号操作数量如下

expected running time

第三次:使用二进制堆的dijkstra的预期运行时间允许在log(n)时间内执行所有操作

expected binary heap

但是,如果我们考虑图表密集,为什么密集图上的运行时间是线性的 dense graph

有人可以在这里帮助进行O符号和日志计算吗?

2 个答案:

答案 0 :(得分:1)

首先,如果mn log(n) log(log(n))的大欧米茄,那么log(n)就是log(m)的大欧米茄,这并不难说明。因此,您可以证明mn log(m) log(log(m))的大o。

通过此,您可以证明nm / (log(m) log(log(m)))的大o。

将其替换为第三点中的表达式,我们得到预期的运行时间:

O(m + n log(m/n) log(n))

                   m                                                 m
    = O(m + (------------------) log(log(m) log(log(m))) log(------------------)
             log(m) log(log(m))                              log(m) log(log(m))

从这里,您可以将所有产品日志扩展为日志总和。你会得到很多条款。然后,这只是一个证明每个人都是O(m)o(m)的问题。这很简单,但很乏味。

答案 1 :(得分:0)

我的解决方案现在是以下

calcu enter image description here