Algorithm 哪个更好?

Algorithm 哪个更好?,algorithm,time-complexity,graph-theory,breadth-first-search,kruskals-algorithm,Algorithm,Time Complexity,Graph Theory,Breadth First Search,Kruskals Algorithm,我正在尝试开发一种能够从图中找到最小生成树的算法。我知道已经有很多现有的算法。但是我正在尝试消除Kruskal算法中需要的边排序。到目前为止,我开发的算法有一部分需要计算不交集,我需要一个有效的方法。经过大量研究,我知道唯一可能的方法是使用BFS或DFS,其复杂性为O(V+E),而Kruskal的算法的复杂性为O(ElogE)。现在我的问题是,O(V+E)或O(ElogE),哪一个更好?一般来说,E=O(V^2),但对于所有图来说,这个界限可能并不严格。特别是,在稀疏图中,E=O(V),但对于算

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

一般来说,
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)

另一种看待它的方式是,在big-O表示法中,
O(X+Y)
的意思与
O(max(X,Y))
的意思相同


请注意,这仅在
V
E
可能具有相同幅值时才有用。对于Kruskal的算法,主要因素是需要对边列表进行排序。无论你有一个稀疏图还是一个稠密图,这一步支配着任何可能是
O(V)
,因此你只需写
O(E lge)
,而不是
O(V+E lge)
V
就可以用
E
来表示,使用欧拉公式。因此
O(V+E)
实际上就是
O(E)
。由于
O(n)
O(E+V)~=O(E)
。我不确定我的数学,所以将此作为评论而不是评论发布answer@Srini你不能假设没有循环,因为问题是关于计算一个图的最小生成树(如此无向且具有潜在的非平凡循环)。然而,假设有一棵树可以找到,我们可以安全地假设
V@Rerito是一个好点,我忽略了循环方面,因为我不确定如何处理平面图的Euler公式的
V-E+F=2
F
分量。但我想,如果OP或其他人能够想出如何处理这个问题,或者证明
V
仍然有一个线性关系w.r.t
E
,那么我猜他们仍然可以在这个论证的基础上,并行运行这两个算法,并在一个算法完成后立即停止,这给了你复杂性
O(min(V+E,E Log E))
,哪一个总是最好的。你能给我一个关于O(ElogE)的想法吗?Kruskal的算法涉及到边列表的排序,所以无论你有一个稀疏图还是稠密图,这将控制简单地迭代无序列表的成本。“加法”术语
V
在这两种情况下都是不相关的,因此只写
O(E lge)
而不是
O(V+E lge)