为什么Dikstra算法以O(V + E log V)而不是O(V ^ 2)运行?

问题描述 投票:0回答:2

其中V是顶点数,E是边数,在最坏的情况下,所有节点都已连接,并且在每个节点处,您都在查看所有其他节点。那不就是O(V ^ 2)吗?我查了一下,发现它实际上是O(V + E log V),但没有任何解释。

java graph
2个回答
0
投票

您仅考虑完全连接的图形情况。在给定某些输入参数的情况下,big-O表示法是最坏的情况,并且由于给定的复杂度使用V和E,因此这意味着完全连通的图是不相关的。对于一般的图,Dijkstra的算法将以O(V + ElogV)或更快速的速度结束;对于完全连接的图,当E约为(V ^ 2)/ 2时,它将以O(V ^ 2)结束,这确实比O(V +((V ^ 2)/ 2)logV)快。 >


0
投票

否,Dijkstra使用Fibonacci堆

© www.soinside.com 2019 - 2024. All rights reserved.