Range最小/最大查询

Range Minimum/ Maximum Query

本文关键字:查询 最小 Range      更新时间:2023-10-16

我有坐标点(x,y)假设我有10,000个点。现在,当一个新的点作为测试查询给定时,说(p,q)。我需要检查坐标点中的每一个点。如果文本查询的x坐标为py从网上搜索,我知道Rmq-范围最小/最大查询数据结构可以帮助我,但我不确定如何做到这一点。任何关于c++的参考资料或代码帮助都会有很大的帮助。谢谢

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

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

另一方面,如果您打算对数据进行更花哨的操作,例如在数据集中搜索最接近某个测试点的k个点,或者试图找到某个边界区域中的所有点,您可能需要考虑使用kd树或四叉树。这些标准二进制搜索的变体提供了快速查找(O(log n)时间)。kd-tree还支持非常快的k近邻搜索和在边界卷内部的搜索。而且,如果您有实现标准二叉搜索树的经验,那么kd-tree非常容易实现。

希望这对你有帮助!