JAVA 2D在2D平面中找到距离原点最近的K点

时间:2013-09-17 23:20:08

标签: java sorting big-o closest-points

在给定包含N个点的数组的情况下,在2D平面中找到距离原点最近的K点。你可以假设K远小于N而N非常大。

这是我到目前为止所做的:

   public class OriginQuestion {

     public static class Point {

     public double x;

    public double y;

 } 
  public static Point[] closestk( Point  myList[], int k ) {}
    for(int i=0;i<myList.length;i++){

    }

  }

帮助表示赞赏

2 个答案:

答案 0 :(得分:4)

此问题是nearest neighbor搜索问题的变体。最简单的解决方案是计算从原点到所有N个点的距离,然后找到最近使用的K,例如quickselect algorithm,给出O(n)的时间和空间复杂度。

答案 1 :(得分:2)

使用堆可以解决此问题。我们可以从创建大小为k的最大堆开始,然后开始向其添加点。在我们完成将K点添加到堆中之后。

现在,如果第(K + 1)点的距离低于最大堆根,我们删除root并将此第(K + 1)点添加到我们的最大堆中。

在我们完成处理所有N个点之后,我们的堆将为我们提供解决方案。 最坏的情况复杂度应为N(log K),因为我们将对N个数字执行此操作,并且需要日志K操作来移动堆中的节点。