【发布时间】:2014-06-08 07:02:14
【问题描述】:
问题:
有一组固定的蓝色坐标。我想找到最接近给定red 坐标的blue 坐标
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 非常大,因此查找到所有人的距离非常低效,并且我的程序无法在给定时间内完成任务。
那么有没有比我的更有效的算法和任何建议?
更新: 红点一次出现大约一百万次。蓝点列表是固定的。因此,我认为我可以负担对蓝点列表的任何初始更改,例如在需要时进行排序。
谢谢。
【问题讨论】:
-
你可以在所有点上准备Voronoi图,然后检查检查点落在哪个区域
-
如果坐标仅在列表中可用,并且任何坐标都可以出现在列表中的任何点,则没有实质性的改进,因为您总是需要查看列表中的每个点,是否计算距离,对列表进行排序等。但是,如果坐标点有某种模式,您也许可以利用它。有吗?
-
坐标列表是否以任何方式排序?比如按x轴值排序?
-
@jaket - 我不认为它有帮助......
-
@StephenC - 我正在考虑使用分治法cs.mcgill.ca/~cs251/ClosestPair/ClosestPairDQ.html 的最接近配对算法的变体。算法的第一个要求是按x轴对点进行排序。
标签: java algorithm data-structures graph shortest-path