问题:
有一组固定的蓝色坐标。我想找到与给定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非常大,所以找到所有距离非常低效,我的程序无法在给定时间内完成任务。
那么有没有比我的有效算法和任何建议?
更新 红点一次一个,大约一百万次。蓝点列表是固定的。因此,我认为如果需要,我可以负担任何蓝点列表的初始更改,如排序。
谢谢。
答案 0 :(得分:2)
如果你只是(只是)一个点列表,而你需要这样做一次,那么就没有更有效的方法了。
但是如果你必须多次为许多不同的点做这个程序,那么有很多方法可以提高效率。例如:
但请注意,这些方法涉及设置开销,需要在收支平衡之前通过多次查找(即找到最近点计算)进行摊销。
答案 1 :(得分:0)
解决方案是分层树,即。树状图或分层聚类。您可以使用clusterfck JS库。