欧几里德最小生成树和Delaunay三角剖分

时间:2017-01-03 19:09:24

标签: python euclidean-distance minimum-spanning-tree delaunay

我想根据2D平面上一组点之间的欧氏距离计算最小生成树。我当前的代码存储了所有边缘,然后执行Prim的算法以获得最小的生成树。但是,我知道这样做可以为所有边缘留出O(n^2)空间。

在做了一些研究后,很明显,如果我首先在这组点上计算delaunay三角剖分,然后通过运行Prim或Kruskal'来获得最小生成树,则可以优化内存和运行时。在三角剖分边缘的算法。

这是编程竞赛的一部分(https://prologin.org/train/2017/qualification/taxi_des_neiges),所以我怀疑我能否使用scipy.spatial。有没有其他方法可以简单地获得Delaunay三角剖分中包含的边缘?

提前致谢。

2 个答案:

答案 0 :(得分:5)

模块会有帮助吗?以下是一些可行的方法:

滚动你自己?这两个都描述了增量算法,Wikipedia似乎是O(n log n):

这里的an ActiveState recipe可能有助于入门,但看起来还没有完成。

答案 1 :(得分:3)

看起来Scipy使用的是QHull,它位于此文件夹的某个位置......具有执行delaunay三角测量并获得边缘的代码(尽管在C中实现)

https://github.com/scipy/scipy/tree/master/scipy/spatial/qhull/src