在N点数据集

时间:2017-07-17 11:06:32

标签: algorithm graph-algorithm dijkstra

我试图解决的问题涉及大约5000个GPS点的数据集,以及在该数据集中找到导致最大总距离的5个点的任务。

Sketch

(请注意,开始和结束不一定在同一位置)

天真的解决方案是五个嵌套循环,迭代数据集中的所有点,直到找到最大的总距离,但鉴于距离计算有点慢,这是不切实际的:

for (i = 0; i < points.length; i++) {
  pointA = points[i];

  for (j = i; j < points.length; j++) {
    pointB = points[j];
    distanceAB = distance(pointA, pointB);

    for (k = j; k < points.length; k++) {
      pointC = points[k];
      distanceBC = distance(pointB, pointC);

      // ...

      score = distanceAB + distanceBC + distanceCD + distanceDE;
      if (score > winner.score) {
        // save new winner
      }
    }
  }
}

这个问题的解决方案是否需要做更少的工作?

1 个答案:

答案 0 :(得分:2)

非封闭有序路径5点

如果要对路径中的点进行排序,则需要找到具有固定边数的DAG中的最长路径。这可以通过简单的dynamic programming算法来完成。再次发生是 enter image description here

答案是:max(f(i,4))

5点封闭有序路径

如果我们需要在图片上找到一个封闭的路径(带有有序点),那么对于每个start点,我们需要找到这个函数的值: enter image description here

start为起点的封闭路径的最大长度为
longest(start) = max(f(i,4) + dist(i,start))

因此,答案将是:max(longest(start))