【发布时间】:2018-11-21 03:04:24
【问题描述】:
我遇到了一个任务,基本上要求您找到所有顶点都连接的给定图形的 MST。我尝试使用 Kruskal 的算法,但我很快发现空间限制太小,无法以兆字节存储所有边缘,所以我也放弃了 Prim 和 Boruvka 的算法。有没有办法实现这些算法(或任何其他 MST 算法),其空间复杂度优于 O(E),在这种情况下为 O(V^2)?
【问题讨论】:
-
如果不存储所有边,你怎么知道每条边的重量
-
不知道,这就是为什么我要问是否有办法这样做,或者是否有其他方法可以找到 MST。
-
也许发布您的代码以找到空间优化
-
我相信@juvian 有道理。我相信任务的空间需求不包括图表的存储成本。 (即邻接列表)如果没有,则无法将给定的图形表示为输入。如果我是正确的,并且问题不包括存储邻接列表的成本,那么 Prim 的算法可以为您解决问题,只要您在每个顶点的优先级队列中存储一个元素。 (即,如果您使用集合而不是优先级队列)如果您确实在 Prim 算法中使用了集合,那么该集合最多包含 O(V) 个元素。
-
朱维安是对的。你不能在不知道权重的情况下构建 MST,这不可避免地会花费 O(V²) 空间。但也许在你的情况下,权重可以计算而不是存储?
标签: algorithm minimum-spanning-tree space-complexity kruskals-algorithm prims-algorithm