范围最小/最大查询

时间:2011-08-25 00:49:35

标签: c++ algorithm data-structures

我有坐标点(x,y)说我有10 000点。现在当一个新点被给出为测试查询说(p,q)。我必须检查坐标点中的每个点。如果是文本查询的x坐标            P Y. 从在线搜索我开始知道Rmq-范围最小/最大查询数据结构可以帮助我,但我不知道如何做到这一点..可以帮助我如何做到这一点.. c ++中的任何引用或代码帮助将非常有帮助。谢谢你

1 个答案:

答案 0 :(得分:3)

如果您的目标是检查数据集中是否存在该点,那么您可以使用许多非常有用的数据结构来保存数据,每个数据结构都支持非常有效的查找。

对于初学者,如果您需要知道的是该点是否存在,您可以始终将所有点存储在标准哈希表或平衡二叉搜索树中。这将分别提供O(1)或O(log n)查找时间。此外,这些结构往往可用于大多数编程语言。

另一方面,如果您计划对数据执行更精细的操作,例如搜索最接近某个测试点的数据集中的k点,或者尝试查找某些边界区域中的所有点,您可能需要考虑使用kd-treequadtree。标准二进制搜索的这些变体提供快速查找(O(log n)时间)。 kd-tree还支持非常快k-nearest-neighbor searches并在边界卷内搜索。此外,如果您有任何实现标准二叉搜索树的经验,那么kd-tree非常容易实现。

希望这有帮助!