繁体   English   中英

Dijkstra算法在由排序列表/数组实现的优先级队列上的运行时间

[英]Running time for Dijkstra's algorithm on a priority queue implemented by sorted list/array

因此,我很想知道算法的运行时间在由排序列表/数组实现的优先级队列上。 我知道对于未排序的列表/数组,它是O((n ^ 2 + m)),其中n是顶点数,m是边数。 因此,这等于O(n ^ 2)时间。 但是如果我使用排序列表/数组会更快吗?运行时间是多少? 我知道extractmin将是恒定的时间。

好吧,让我们回顾一下dijkstra算法的需求(供以后参考,通常将顶点和边用作V和E,例如O(VlogE)):
合并所有排序的邻接表:O(E)
最低提取量:O(1)
降低键:O(V)
Dijkstra使用O(V)提取最小运算,而O(E)减少关键运算,因此:
O(1)* O(V)= O(V)
O(E)* O(V)= O(EV)= O(V ^ 2)
采取最渐近的重要部分:
最终渐近运行时间为O(V ^ 2)。
可以做得更好吗? 是。 研究二进制堆,以及优先级队列的更好实现。

编辑 :我实际上犯了一个错误,现在我再看一次。 E不能高于V ^ 2,换句话说,E = O(V ^ 2)。
因此,在最坏的情况下,我们得出的以O(EV)运行的算法实际上是O(V ^ 2 * V)== O(V ^ 3)

我使用SortedList http://blog.devarchive.net/2013/03/fast-dijkstras-algorithm-inside-ms-sql.html它比每次对List排序一次要快20到50倍

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM