【发布时间】:2011-08-21 11:21:34
【问题描述】:
这是我的具体问题。我需要编写一个算法:
1) 采用这两个数组:
a) 大约 3000 个邮政编码(如果您在美国,则为邮政编码)的数组,其中包含它们所覆盖区域中心点的经度和纬度(即每个数组元素 3 个数字)
b) 大约 120,000 个位置的数组,由经度和纬度组成
2) 将每个位置转换为中心点最接近给定经纬度的邮政编码
请注意,位置的经度和纬度不太可能与邮政编码数组中的精确匹配。这就是为什么我要寻找到邮政编码所覆盖区域中心点的最短距离。
我知道如何计算两个经度/纬度对之间的距离。我也很欣赏最接近邮政编码覆盖区域的中心点并不一定意味着您在该邮政编码覆盖的区域 - 如果您在一个非常大的邮政编码区域但靠近边界,您可能更靠近相邻邮政编码区域的中心点。但是,在这种情况下,我不必考虑这一点 - 到中心点的最短距离就足够了。
解决此问题的一个非常简单的方法是访问 120,000 个位置中的每一个,并通过计算与 3000 个邮政编码中心点中的每一个的距离来找到具有最近中心点的邮政编码。不过,这意味着 3000 x 120,000 = 360,000,000 次距离计算。
如果邮政编码和位置在一维空间中(即,由 1 个数字而不是 2 标识),我可以简单地按其一维中心点对邮政编码数组进行排序,然后在邮政编码数组中进行二进制搜索每个位置。
所以我想我正在寻找的是一种对邮政编码中心点的经度和纬度的二维空间进行排序的方法,因此我可以对每个位置执行二维二进制搜索。我已经看到了这个问题的解决方案,但那些只适用于直接匹配,而我正在寻找给定位置的中心点最近的。
我正在考虑缓存解决方案,但如果我可以使用快速的二维二分搜索,这将使解决方案变得更加简单。
这将是批处理程序的一部分,因此我不计算毫秒,但也不会花费数天。每月运行一次,无需人工干预。
【问题讨论】:
标签: sorting binary spatial binary-search