最近点 - 接近缺陷

时间:2017-06-10 10:36:08

标签: java algorithm

我正在解决here

中的最近点问题

问题陈述:

  

我们在平面上给出了一个n个点的数组,问题是要找出数组中最近的一对点。

     

INPUT:输入将是两个数组X和Y,X []存储x坐标,Y []存储y坐标。

     

输出:最小距离。

我的算法:

注意:方法仅适用于正坐标。

  1. 查找(0,0)中所有坐标之间的距离,并将其存储在距离数组中。

  2. 在上一步计算的Sort Distance数组。

  3. 通过计算距离数组中两个连续值之间的差异来找到最小距离。

  4. 代码:

    public class ClosestPoint {
        int x[]={2,12,40,5,12,3},y[]={3,30,50,1,10,4}; // x and y coordinates
        float distance[] = {0,0,0,0,0,0}; // distance
    
        void calculateDis(){
            for(int i=0;i<x.length;i++){
                int dis=(x[i]*x[i] + y[i]*y[i]);
                distance[i]= (float)Math.sqrt(dis);
            }
        }
    
        float findClosest() {
            float closest = Float.MAX_VALUE;
            for(int i=0;i<distance.length-1;i++) {
                float pairDis= distance[i+1]-distance[i];
                if(closest>pairDis) {
                    closest =pairDis;
                }
            }
            return closest;
        }
        public static void main(String arg[]) {
            ClosestPoint p =new ClosestPoint();
            p.calculateDis(); // calculate distance from 0,0.
            Arrays.sort(p.distance);
            System.out.println(p.findClosest());
        }
    }
    

    正确答案: 1.4

    我的回答: 0.099

    我没有得到正确答案。有人可以指出我的方法存在缺陷。

    感谢。

1 个答案:

答案 0 :(得分:2)

实际问题在于逻辑。您正在计算与原点的距离并进行比较。这可能会导致错误的答案。

考虑点(3,4)(4,3)的示例。两者距起源都相同 - 5。因此,根据您的逻辑,您对距离进行排序并获取最小连续距离,因此您的算法将返回0(因为排序后数组将为5.0,5.0),但实际答案为<code>\sqrt{2}</code>

Image