二维近似数据的二值搜索算法

时间:2011-08-21 03:14:16

标签: sorting binary spatial binary-search

这是我的具体问题。我需要编写一个算法:

1)采用这两个数组:

a)大约3000个邮政编码的数组(如果你在美国,则是邮政编码),它们所覆盖区域的中心点的经度和纬度(即每个数组元素3个数字)

b)大约120,000个位置的数组,包括经度和纬度

2)将每个位置转换为中心点接近给定经度和纬度的邮政编码

请注意,位置的经度和纬度不太可能与邮政编码阵列中的经纬度精确匹配。这就是为什么我要寻找到邮政编码区域中心点的最短距离。

我知道如何计算两个经度/纬度对之间的距离。我也很欣赏靠近邮政编码区域的中心点并不一定意味着你在邮政编码所覆盖的区域内 - 如果你在一个非常大的邮编区域但靠近边界,你可能会更靠近邻近邮政编码区的中心点。但是,在这种情况下,我不必考虑这一点 - 到中心点的最短距离就足够了。

解决此问题的一种非常简单的方法是访问120,000个位置中的每一个,并通过计算到3000个邮政编码中心点中的每一个的距离来找到具有最近中心点的邮政编码。这意味着3000 x 120,000 = 360,000,000距离计算。

如果邮政编码和位置在一维空间中(即由1号而不是2号标识),我可以简单地按照其一维中心点对邮政编码数组进行排序,然后在邮政编码数组中进行二进制搜索对于每个地点。

所以我想我正在寻找的方法是对邮政编码中心点的经度和纬度的二维空间进行排序,这样我就可以对每个位置进行二维二分搜索。我已经看到了这个问题的解决方案,但那些只适用于直接匹配,而我正在寻找中心点 closests 到给定位置。

我正在考虑缓存解决方案,但如果有一个我可以使用的快速二维二进制搜索,那将使解决方案更加简单。

这将是批处理程序的一部分,所以我不算毫秒,但它也不需要几天。它将每月运行一次,无需人工干预。

1 个答案:

答案 0 :(得分:0)

您可以使用空间填充曲线和四元组而不是四叉树或空间索引。有一些非常有趣的sfc,如希尔伯特曲线和摩尔曲线,有非常有趣的模式。

相关问题