在遵循Dijkstra算法实现的时间复杂度之间混淆

时间:2014-09-28 09:52:05

标签: java algorithm dijkstra

我试图在java中使用Adjacency列表来实现Dijkstra。我在Java中遇到了Dijkstra的一个实现,但我很困惑它是O(ElogV)解决方案还是0(V ^ 2)解决方案。代码链接是:http://www.vogella.com/tutorials/JavaAlgorithmsDijkstra/article.html。 我很困惑,因为在c ++中优化的Dijkstra实现涉及使用优先级队列,但是这里没有使用优先级队列。

1 个答案:

答案 0 :(得分:-1)

使用邻接列表的Dijkstra算法的时间复杂度是

  1. 使用邻接列表和优先级队列:

    O((v+e) log v)。如果图表密集,则e将为v^2。 (例如,完整的图表有(n(n/1)/2) = O(v^2)个边,所以e >> v。)

  2. 对于更密集的图,我们可以使用Fibonacci Heap而不是优先级队列。

    1. 使用邻接列表和Fibonacci堆:

      TC将为O( e + v log v)
      因为在更密集的图e ~ v^2中 TC将为O(v^2 + v log v) ~ O(v^2)