计算邮政编码之间的温度差异

时间:2011-08-24 19:38:58

标签: search brute-force temperature

Prop A.我写了一个邮政编码服务器,它给了我32,000个美国邮政编码。 每个邮政编码都有一个相关的lat-long。 给定2个zipcodes,我可以使用它们的lat-longs找到它们之间的距离。

道具B.我还写了一个天气服务器,你可以在其中输入最多200个拉链码,它会在每个拉链码上吐出温度。

人告诉我他的邮政编码是Z,温度是T. 他问我,距离Z最近10度的最近的地方是什么?

因此,我从Z中按距离排序(使用Prop A)获得了200个拉链码列表。 我将它喂给B并获得200个温度。 如果没有10度冷却,我会得到接下来的200个拉链码并重复直到完成。

问题:这看起来非常低效和蛮力。我觉得我缺少一些物理学见解。如果你向北走,气温会降温并且并非总是如此。向南走,他们升温。所以方向没有帮助。高度可能确实(山谷比山谷凉爽),但很难找到与海拔相关的拉链码数据。

你们能想出一些更聪明的方法吗?任何建议赞赏。 注意:天气数据很贵。你只能打几次天气服务器,每次只能达到200个温度。 (otoh,任何2个zipcodes之间的距离都是预先计算的常量,没有任何成本可以获得。)

3 个答案:

答案 0 :(得分:0)

您可以通过对所有邮政编码进行二进制排序并将所有邮政编码抓取到排序列表中低于用户邮政编码的所有邮政编码,然后对该距离进行相同的操作。这应该相当快 - 二进制排序是log(n),所以你不会在排序上自杀。

答案 1 :(得分:0)

我同意物理论坛的评论,这不是一个物理问题,但物理学(或至少数学)的一些见解可能确实是有序的。如果您能够以低成本获得天气数据,则可以设置数据集并执行一次分析以指导搜索。

具体而言,同时记录每个位置的温度。然后,对于每个位置,计算每个连续邮政编码的温度变化并将其与相对坐标(即相邻拉链的方向)相关联,并存储按温度排序的该列表。当有人输入查询zip时,您的算法将从列表顶部的zip开始,然后继续工作。每个不满意的答案都会添加到堆栈中。如果没有相邻的拉链符合标准(在这种情况下为10度冷却器),算法将开始通过新堆栈重复算法。

我不是一个优秀的程序员,所以我不会给出任何代码,但在我看来,这将比“蛮力搜索”更好地“跟随”温度图的自然轮廓,并将保留在接近结果。如果您使用多个并发温度测量设置初始数据集,则可以对这些数据进行时间平均以获得更好的性能。

答案 2 :(得分:0)

这最适合stackoverflow。

合并数据库。

写一个查询abs(lat-lat_o)+ abs(long-long_0)< 2.00 AND temp< temp_0 - 10.该查询将利用您服务器上的索引。

如果没有结果,请将倍数增加2.00并重复。

如果结果,找到最接近的。如果最近的一个比边界框的最近边缘更远,则保存该条目并将该距离增加2.000并查看其中一个是否更近。

Scales,高效地使用数据库。