无交叉匹配线段的高效算法

时间:2015-04-25 19:34:44

标签: algorithm geometry computational-geometry

我想知道一种有效的算法匹配(分成n / 2个不同的对)n = 2k点在平面中的一般位置,使得连接匹配点的段不交叉。任何想法都会有助于帮助。

2 个答案:

答案 0 :(得分:1)

先生。 SRKV有一种更简单的方法。

  1. 根据x坐标对所有点进行排序。
  2. 现在将最左边的点与下一个最左边的点配对。
  3. 删除我们刚配对的两个点。
  4. 从第2步继续,直到没有任何积分。
  5. 如果两个点具有相同的x坐标。以下是打破平局规则。

    1. 将具有较低y坐标的点连接到具有第二个最低y坐标的点。
    2. 如果有一个奇数个具有相同x坐标的点,那么我们将剩下的单个点(最上面的y)加上下一个x坐标(如果是多个那么最低的那个)。
    3. 要复杂的总复杂度O(nlogn)和要遍历的O(n),所以渐近它是O(nlogn)。

答案 1 :(得分:0)

  1. 找到凸包。
  2. 沿着船体工作(顺时针方向),取相邻的顶点对并将它们添加到您的对中。在执行此操作时从图表中删除每对。如果船体包含偶数个点,则所有点都将被删除,否则将留下1个。
  3. 如果图表仍包含点数,请转到1。
  4. 如果每个船体包含偶数个点,那么很明显,这个算法找到的每对线段都来自同一个船体,或来自不同的船体 - 无论哪种方式,它们都不会相交。我相信即使有些船体的点数奇数也会有效。