问题
我有一个包含大约200,000个节点的列表,表示城市中的纬度/经度位置,我需要计算最小生成树。我知道我需要使用Prim算法,但首先我需要一个连通图。(我们可以假设这些节点在一个欧几里得平面上)
为了构建这个连通图,我首先考虑计算完全图,但是(205,000 * (205,000-1)/2 约为190亿条边),我无法处理那么多边。
选项
然后我遇到了德劳内三角剖分:如果我构建这个“德劳内图”,它包含一个子图,该子图是根据最小生成树的定义,并且总共有约600,000条边,根据维基百科的说法[...]最多有3n-6条边。因此,这可能是最小生成树算法的一个很好的起点。
另一个选择是构建一个近似连通的图,但这样做可能会错过对我的最小生成树产生重要影响的边。
我的问题
在这种情况下,Delaunay是一个可靠的解决方案吗?如果是这样,除了Delaunay三角剖分之外,是否还有其他可靠的解决方案?
进一步信息:这个问题必须用C语言解决。
更新
通过进行Delaunay三角剖分成功解决了这个问题,你可以在这里看到结果:https://github.com/Siirko/ACM-Paris
注意:有时代码可能相当丑陋,请注意。