哪一个更好O(V + E)或O(ElogE)?

时间:2018-05-01 16:47:21

标签: algorithm time-complexity graph-theory breadth-first-search kruskals-algorithm

我正在尝试开发一种能够从图中找到最小生成树的算法。我知道已经有很多现有的算法。但是我试图消除Kruskal所需的边缘排序'算法。到目前为止我开发的算法有一个部分需要对不相交集进行计数,我需要一种有效的方法。经过大量的研究后我才知道唯一可行的方法是使用BFS或DFS。 O(V + E)的复杂性,而Kruskal的算法具有O(ElogE)的复杂性。现在我的问题是哪一个更好,O(V + E)或O(ElogE)?

1 个答案:

答案 0 :(得分:0)

一般来说,E = O(V^2),但是对于所有图表来说,这个界限可能并不严格。特别是在稀疏图中E = O(V),但对于算法复杂度通常被称为最坏情况值。

O(V + E)是一种表示复杂性取决于边缘数量的方法。在稀疏图表O(V + E) = O(V + V) = O(V)中,在密集图O(V + E) = O(V + V^2) = O(V^2)中。

另一种看待它的方法是看到在大写符号中,O(X + Y)表示与O(max(X, Y))相同的东西。

请注意,这仅在VE具有相同幅度时才有用。对于Kruskal算法,主要因素是您需要对边缘列表进行排序。无论您是稀疏图还是密集图,该步都支配任何可能O(V)的内容,因此只需编写O(E lg E)而不是O(V + E lg E)