什么是计算最近点的有效方法?

时间:2010-03-11 08:50:23

标签: iphone objective-c cocoa-touch core-data

我有位于核心数据中的位置数据的对象,我希望能够获取并显示当前位置的最近点。我知道有一些公式可以计算从当前纬度/经度到存储纬度/经度的距离,但我很好奇为核心数据中存储的一组1000多点执行此操作的最佳方法。我知道我可以将核心数据中的点返回到数组,然后循环查找点之间的距离的最小值,但我想是有一种更有效的方法,可能以某种方式利用核心数据。

任何见解都将受到赞赏。

编辑: 我不知道在初始搜索中我是如何错过这个的,但是this SO question建议只是迭代核心数据对象的数组,但是根据当前位置用一个边界框限制数组大小。这是我能做的最好的吗?

3 个答案:

答案 0 :(得分:2)

我对核心数据知之甚少,但有一些众所周知的算法,如Quadtree来解决这个问题

答案 1 :(得分:2)

从我可以收集到的内容来看,在这种情况下,最佳方法似乎是使用当前位置周围的边界框返回一个点数组。

如果返回的数组为空,则可以检索当前位置的特定范围内的点,然后增加该框的大小。一旦某些结果返回,计算数组中最近的结果并使用该点。

答案 2 :(得分:1)

您正在制作的内容名为Nearest neighbor search,并且有一个维基百科条目,描述了用于计算它的方法。我认为这是一个良好的开端,因为每种方法的复杂性都是状态,因此您可以根据实施方式来衡量复杂性:)

  

NNS最简单的解决方案   问题是计算距离   从查询点到其他每一个   指向数据库,保持跟踪   迄今为止“最好的”。这个算法,   有时被称为天真   方法,运行时间为O(Nd)

     

位置敏感散列(LSH)是一个   在空间中对点进行分组的技术   基于一定距离进入“水桶”   在点上运行的度量。点   在...之下彼此接近   选择的度量标准映射到相同的   高概率的桶