【问题标题】:Euclidean Minimal Spanning Tree and Delaunay Triangulation欧几里得最小生成树和 Delaunay 三角剖分
【发布时间】:2017-01-03 19:09:23
【问题描述】:

我想根据二维平面上一组点之间的欧几里德距离计算最小生成树。我当前的代码存储所有边,然后执行 Prim 算法以获得最小生成树。但是,我知道这样做会占用所有边缘的O(n^2) 空间。

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    这里是an ActiveState recipe,可能有助于开始,但看起来还没有完成。

    【讨论】:

      【解决方案2】:

      看起来 Scipy 使用 QHull,它.. 在这个文件夹的某个地方... 有执行 delaunay 三角剖分和获取边缘的代码(尽管用 C 实现)

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

      【讨论】:

      • 没问题,希望wildwilhelm的回答会有所帮助!看起来他找到了算法的抽象描述。
      • 是的,你的两个答案都对我有帮助,所以在这里为感谢投上一票!
      猜你喜欢
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 2015-01-07
      • 2019-04-18
      • 1970-01-01
      • 2021-05-14
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多