过滤许多事情的有效方法

时间:2015-04-09 22:12:38

标签: algorithm sorting data-structures

有一个场地清单。每个场地都附有一个价格和一个latlon。用户输入最大距离和最大价格,应用程序返回符合这些条件的场地列表。需要在查询上计算距离,但我可以使用价格或给定的latlons进行某种结构。我已经知道如何在O(n)中解决这个问题 - 我遍历了一个餐馆名单,如果他们符合标准,就将它们添加到结果中。

有没有办法更有效地做到这一点?我正在考虑使用价格作为关键字(可以在运行时间之前计算)制定BST,然后切断超出价格限制的BST部分,然后迭代BST中的所有内容,但这仍然是O(n),对吧?

1 个答案:

答案 0 :(得分:0)

考虑这个问题的一种方法是将其视为多维范围搜索问题。每个场地都可以被认为是由经度,纬度和价格给出的三维空间中的一个点。如果你想找到一个特定半径范围内的所有场地,其价格最多只有一定数量,那么你要搜索一个圆柱体中具有给定中心和半径的所有点,其中上限和下限是最大价格, 0,分别。

您可能需要考虑使用多维搜索树结构(如k-d树或R树)来解决此问题。获得此结构后,在结构中搜索圆柱体的边界框以获取候选点列表。然后,测试该框中的每个点,看它是否在圆柱体内。假设这些点在某种程度上是均匀分布的,你会发现它们中大约有π/ 4分数在圆柱体中,因此你不会浪费太多精力。