我试图在java中使用Adjacency列表来实现Dijkstra。我在Java中遇到了Dijkstra的一个实现,但我很困惑它是O(ElogV)解决方案还是0(V ^ 2)解决方案。代码链接是:http://www.vogella.com/tutorials/JavaAlgorithmsDijkstra/article.html。 我很困惑,因为在c ++中优化的Dijkstra实现涉及使用优先级队列,但是这里没有使用优先级队列。
答案 0 :(得分:-1)
使用邻接列表的Dijkstra算法的时间复杂度是
使用邻接列表和优先级队列:
O((v+e) log v)
。如果图表密集,则e
将为v^2
。 (例如,完整的图表有(n(n/1)/2) = O(v^2)
个边,所以e >> v
。)
对于更密集的图,我们可以使用Fibonacci Heap而不是优先级队列。
使用邻接列表和Fibonacci堆:
TC将为O( e + v log v)
因为在更密集的图e ~ v^2
中
TC将为O(v^2 + v log v) ~ O(v^2)