2011-06-07 68 views
3

基本上我有一个用户当前的位置。然后我有一个坐标列表。如何计算从坐标列表中给定点的最近坐标

我将如何去计算列表中最近一组坐标与用户当前位置的对比。我的应用程序是用Java编写的HTHE Android平台

+0

你大概知道有多少合作你将在你的集合中拥有的下属?这可能会影响蛮力方法是行得通的还是会太慢 – chillysapien 2011-06-07 09:01:03

+0

你好有200个坐标来测试当前位置对 – molleman 2011-06-07 09:09:40

+0

对于200坐标,不要太担心。只需测试一切,最有可能比您可以优化的任何东西都更快更简单。 – LiKao 2011-06-07 10:30:34

回答

0

有一种分而治之算法来寻找在O关闭对点的距离最小距离(nlogn )。虽然它可能对你的数据集的大小是一个过度消耗。更多信息就可以了here

1

如果列表中的点,而均匀分布在该地区,这应该工作:

将该区域成为具有一定规模的象限。保留并更新驻留在每个象限中的点列表。给定一个坐标x,找到它所属的象限,只计算同一象限中的点的距离(如果没有,则从相邻象限中添加点,直到成功),选择k个最近点p_i。

检查圆c(center = x,radius = max(p_i-x))是否跨过任何未检查的象限,如果有,则计算与这些象限点之间的距离。完全返回最接近的k个点的集合。您可能需要检查c中包含点的最接近象限,直到找到k个最接近的点p_i,这样c(x,max(p_i-x))中的所有象限都是空或检查。 加速从O(n)到O(log n)的最近象限搜索:您需要实现树形结构:4象限的象限等,它跟踪每个象限中的点数。当点移动时,更新它(O(log))。无论如何,对于200分这可能是一个矫枉过正的问题。

编辑:而不是“树形结构”只是使用哈希表和一个简单的散列函数,如:(X DIV 10^P,Y DIV 10^P)

+0

谢谢...当应用程序扩展时,这非常棒 – molleman 2011-06-08 16:43:35

相关问题