c++ - 范围最小值/最大值查询

标签 c++ algorithm data-structures rmq

我有坐标点 (x,y) 说我有 10 000 点。现在当一个新点作为测试查询给出时说(p,q)。我必须检查坐标点中的每个点。如果文本查询的 x 坐标是 PY 通过在线搜索,我了解到 Rmq- range min/max 查询数据结构可以帮助我,但我不确定该怎么做。有人可以帮助我吗,我该怎么做。C++ 中的任何引用或代码帮助都会很有帮助。谢谢

最佳答案

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

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

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

希望这对您有所帮助!

关于c++ - 范围最小值/最大值查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7183949/

相关文章:

c++ - 如何获取硬盘驱动器的序列号

c++ - 了解 ATI 和 NVIDIA 在 OpenGL 渲染方面的差异的良好来源?

Python找出设置最高匹配

Python递归扩展列表

java - 从已排序的双向链表创建二叉搜索树

c++ - 为什么调用 istream::tellg() 会影响我的程序的行为?

c++ - 将 vector 声明为类数据成员时出错

algorithm - 流数据的归并排序算法

algorithm - 为什么我们通常在分而治之算法中分成两部分?

java - 如何基于堆栈等自定义数据结构创建 ObservableList