我有两个ArrayList,Double数据类型, 1.latitudes 经度 每个都有200多个元素
说我给出一个随机测试坐标,比如说(1.33,103.4),格式为[纬度,经度]
有没有算法可以轻松找到最近点, 或者我是否需要暴力计算每个可能的点,找到斜边,然后比较200多个斜边以返回最近的点?感谢
答案 0 :(得分:2)
沿一个轴对点阵列进行排序。然后,沿着该轴定位最接近所需点的阵列中的点并计算距离(使用适合于问题拓扑和比例的任何度量)。
然后,沿两个方向沿阵列搜索,直到到这些点的距离大于目前为止的最佳结果。最短的距离就是答案。
这可能导致必须搜索整个数组,并且是Branch and bound的形式受问题几何的约束。如果这些点在您正在搜索的点周围均匀分布,那么扫描将不需要很多试验。
替代空间索引(如四叉树)将提供更好的结果,但是您的少量点将使准备索引的设置成本远远大于简单排序。您需要跟踪排序导致的位置更改,因为其他数组不会以相同的方式排序。如果将数据更改为单个点数组,则排序将同时重新排序整个点。
答案 1 :(得分:0)
如果对数组进行了排序,则可以使用二进制搜索来查找数组中请求点的位置。找到索引后,您应该检查四个附近的点以找到最接近的索引。
1)假设你有两个排序的阵列经度和纬度
2)你搜索第一个并找到两个附近的点
3)然后你搜索第二个并找到另外两个点
4)现在你有两到四个点(结果可能相交)
5)这些点将在目的地点附近形成一个正方形
6)找到最近的点
答案 2 :(得分:0)
不应该选择最近的纬度(或长)值来搜索长(或纬)轴,实际上你可以留在纬度(或长)线但远离长(或纬度)值
所以最好的方法是计算所有距离并对它们进行排序