度量空间中的高效最小生成树

时间:2011-01-17 17:51:28

标签: algorithm minimum-spanning-tree

我在一些度量空间中有一大组点(数量> n> 10000)(例如配备Jaccard Distance)。我想用最小的生成树连接它们,使用公制作为边缘的权重。

  • 是否存在运行时间小于O(n 2 )的算法?
  • 如果没有,是否有一个算法运行时间小于O(n 2 )平均时间(可能使用随机化)?
  • 如果没有,是否有一个算法在小于O(n 2 )的时间内运行并且给出了最小生成树的良好近似值?
  • 如果没有,是否有这样的算法不存在的原因?

提前谢谢!

编辑下面的海报: 用于查找最小生成树的经典算法在此处不起作用。他们的运行时间有一个E因子,但在我的情况下E = n 2 因为我实际上考虑了完整的图。我也没有足够的内存来存储所有> 49995000可能的边缘。

2 个答案:

答案 0 :(得分:5)

显然,根据这个:Estimating the weight of metric minimum spanning trees in sublinear time没有确定性的o(n ^ 2)(注意:smallOh,这可能是你的意思,小于O(n ^ 2),我猜)算法。该文还给出了度量最小权重生成树的子线性随机算法。

另请参阅本文:An optimal minimum spanning tree algorithm,它提供了一种最佳算法。该论文还声称,最优算法的复杂性尚不清楚!

第一篇论文中的参考资料应该是有用的,而且该论文可能与您的问题最相关。

希望有所帮助。

答案 1 :(得分:4)

当我在3 - 4年前看到一个非常类似的问题时,我在我看过的文献中找不到理想的解决方案。

我认为的诀窍是找到一个“可能很好”边缘的“小”子集,然后你可以运行普通的旧Kruskal。通常,对于一些小的 k ,很可能在将每个顶点连接到其 k 最近邻居的边缘集合中找到许多MST边缘。这些边可能不会跨越图形,但是当它们没有时,每个组件都可以折叠到单个顶点(随机选择)并重复该过程。 (为了更好的准确性,选择一些少数 r 代表,而不是选择一个代表成为新的“supervertex”,并在下一轮检查所有 r ^ 2两个超变量之间的距离,选择最小值。)

对于在有限维欧几里得空间中对象可以表示为向量的情况,

k - 最近邻算法是非常好的研究,所以如果你能找到一种方法来映射你的对象到那个(例如multidimensional scaling)然后你可能有运气。特别是,向下映射到2D允许您计算Voronoi图,并且MST边将始终在相邻面之间。但是从我读过的一点点来看,这种方法并不总能产生高质量的结果。

否则,您可能会发现聚类方法很有用:Clustering large datasets in arbitrary metric spaces是我发现的少数几篇明确处理欧几里德空间中不一定是有限维向量的对象的论文之一,并考虑了这种可能性计算上昂贵的距离函数。