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

JAVA 2D在2D平面中查找距离原点最近的K点,java,sorting,big-o,closest-points,Java,Sorting,Big O,Closest Points,给定包含N个点的数组,在二维平面中查找距离原点最近的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(in

给定包含N个点的数组,在二维平面中查找距离原点最近的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++){

    }

  }
公共类原始问题{
公共静态类点{
公共双x;
公共双y;
} 
公共静态点[]闭合stk(点myList[],int k){}

对于(int i=0;i这个问题是搜索问题的一个变体。最简单的解决方案是计算从原点到所有N个点的距离,然后使用例如,给出O(N)的时间和空间复杂度,找到最近的K.

这个问题可以通过使用堆来解决。我们可以从创建大小为k的最大堆开始,并开始向其中添加点。完成后,向堆中添加k个点

现在,如果第(K+1)点的距离小于最大堆根,我们移除根并将第(K+1)点添加到最大堆

在我们处理完所有N个点之后,堆将给出解决方案。
最坏情况复杂度应为N(logk)正如我们将要做的那样,移动堆中的一个节点需要N个数字和log K操作。

我认为,至少,你需要为如何实现这一点制定一些计划。也许可以先考虑一下,如果给你一张纸上的点列表,你将如何手工完成这一操作?因此,基本上,你什么都没有。