【发布时间】:2018-05-01 16:47:20
【问题描述】:
我正在尝试开发一种能够从图中找到最小生成树的算法。我知道已经有很多现有的算法。但是我试图消除 Kruskal 算法中所需的边排序。到目前为止,我开发的算法有一部分需要计算不相交的集合,我需要一种有效的方法。经过大量研究,我知道唯一可能的方法是使用复杂度为 O 的 BFS 或 DFS (V+E),而 Kruskal 算法的复杂度为 O(ElogE)。现在我的问题是,O(V+E) 还是 O(ElogE) 哪个更好?
【问题讨论】:
-
假设没有环,
V可以用E表示,使用欧拉公式。因此O(V+E)实际上只是O(E)。由于O(n) < O(nlogn),O(E + V) ~= O(E) < O(ElogE)。我不确定我的数学,所以将其发布为评论而不是答案 -
@Srini 您不能假设没有循环,因为问题是关于计算图的最小生成树(因此是无向的并且具有潜在的非平凡循环)。然而,假设有一棵树可以找到,我们可以安全地假设
V <= E -
@Rerito 好点,我忽略了循环方面,因为我不确定如何处理欧拉平面图公式的
V - E + F = 2的F组件。但我想如果 OP 或其他人能够弄清楚如何处理这个问题或证明V仍然与E共享线性关系,那么我想他们仍然可以建立在这个论点上 -
并行运行两种算法并在一个完成后立即停止会给您带来复杂性
O(min(V+E, E Log E)),这始终是最好的。
标签: algorithm time-complexity graph-theory breadth-first-search kruskals-algorithm