我正在尝试开发一种能够从图中找到最小生成树的算法。我知道已经有很多现有的算法。但是我试图消除Kruskal所需的边缘排序'算法。到目前为止我开发的算法有一个部分需要对不相交集进行计数,我需要一种有效的方法。经过大量的研究后我才知道唯一可行的方法是使用BFS或DFS。 O(V + E)的复杂性,而Kruskal的算法具有O(ElogE)的复杂性。现在我的问题是哪一个更好,O(V + E)或O(ElogE)?
答案 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))
相同的东西。
请注意,这仅在V
和E
具有相同幅度时才有用。对于Kruskal算法,主要因素是您需要对边缘列表进行排序。无论您是稀疏图还是密集图,该步都支配任何可能O(V)
的内容,因此只需编写O(E lg E)
而不是O(V + E lg E)
。