用于在二维图中找到给定点的最近坐标的算法

时间:2014-06-08 07:02:15

标签: java algorithm data-structures graph shortest-path

问题: 有一组固定的蓝色坐标。我想找到与给定blue坐标最近的red坐标 Here is the graph

这是我的方法:

获得所有蓝点的笛卡尔距离并找到最小值。

float min=Float.MAX_VALUE;
float temp=0;
for(int i=0;i<cordinateList.size;i++){
    temp=cordinateList.get(i).x*cordinateList.get(i).x+cordinateList.get(i).y*cordinateList.get(i).y;
    if(temp<min){
        min=temp;
    }
}

我需要什么:

我的方法不可行,因为cordinateList非常大,所以找到所有距离非常低效,我的程序无法在给定时间内完成任务。

那么有没有比我的有效算法和任何建议?

更新 红点一次一个,大约一百万次。蓝点列表是固定的。因此,我认为如果需要,我可以负担任何蓝点列表的初始更改,如排序。

谢谢。

2 个答案:

答案 0 :(得分:2)

如果你只是(只是)一个点列表,而你需要这样做一次,那么就没有更有效的方法了。

但是如果你必须多次为许多不同的点做这个程序,那么有很多方法可以提高效率。例如:

但请注意,这些方法涉及设置开销,需要在收支平衡之前通过多次查找(即找到最近点计算)进行摊销。

答案 1 :(得分:0)

解决方案是分层树,即。树状图或分层聚类。您可以使用clusterfck JS库。