我想根据2D平面上一组点之间的欧氏距离计算最小生成树。我当前的代码存储了所有边缘,然后执行Prim的算法以获得最小的生成树。但是,我知道这样做可以为所有边缘留出O(n^2)
空间。
在做了一些研究后,很明显,如果我首先在这组点上计算delaunay三角剖分,然后通过运行Prim或Kruskal'来获得最小生成树,则可以优化内存和运行时。在三角剖分边缘的算法。
这是编程竞赛的一部分(https://prologin.org/train/2017/qualification/taxi_des_neiges),所以我怀疑我能否使用scipy.spatial。有没有其他方法可以简单地获得Delaunay三角剖分中包含的边缘?
提前致谢。
答案 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