我遇到的任务基本上要求您找到给定图形的MST,其中所有顶点都连接在一起。我尝试使用Kruskal的算法,但我很快发现空间界限太紧,不能用mebibyte存储所有边缘,所以我也放弃了Prim&Boruvka的算法。有没有办法实现任何这些算法(或任何其他MST算法)的空间复杂度优于O(E),在这种情况下是O(V ^ 2)?
答案 0 :(得分:0)
对于可以使用函数w(i,j)计算权重的情况,您可以使用Prim算法计算空间O(n)中的最小生成树而不是O(n ^ 2) https://en.wikipedia.org/wiki/Minimum_spanning_tree#Classic_algorithms)。
在每个阶段维护树中节点的集合T,对于不在树中的每个节点,保持从该节点到树中任何节点的最小距离。
在开始时T是节点0,并且对于每个其他节点,您计算从节点0到该节点的最小距离。
在每个阶段选择不在距离最远的树中的节点。现在计算从该节点到不在树中的所有其他节点的距离。如果它小于他们当前的最小距离更新那个最小距离。
存储成本为O(n),以维持T和O(n),以便为不在树中的每个节点维护从树到该节点的最小距离的注释。