【问题标题】:Range Minimum/ Maximum Query范围最小/最大查询
【发布时间】:2011-08-25 00:49:34
【问题描述】:

我有坐标点 (x,y) 说我有 10 000 个点。现在当一个新点作为测试查询给出时说(p,q)。我必须检查坐标点中的每个点。如果文本查询的 x 坐标是 P Y 从在线搜索中,我知道 Rmq-range min/max 查询数据结构可以帮助我,但我不知道该怎么做..有人可以帮我怎么做..c ++中的任何参考或代码帮助都会有很大的帮助。谢谢

【问题讨论】:

  • 你能澄清你在问什么吗?你想用测试点做什么?你想找到离它最近的点吗?您是否尝试检查该点是否存在于数据集中?
  • 我正在尝试查找该点是否存在于数据集中
  • 更准确地说,我试图获取输入文本的后缀数组范围。也就是说,如果使用后缀数组检查字符串..那么它会给出包含其所有后缀的范围。现在我设法获得了相对于输入文本后缀数组的文本后缀范围。现在我试图查看输入文本的后缀范围是否是测试字符串的前缀。为了测试这一点,我可能必须使用 rmq 或一些好的数据结构来检查这种情况的时间效率
  • 我不确定在这种情况下我看到你的 (x, y) 点是多少。你能详细说明一下吗?
  • 我正在尝试检查测试字符串是输入前缀还是输入字符串是测试字符串前缀

标签: c++ algorithm data-structures rmq


【解决方案1】:

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

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

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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2015-10-02
    • 2013-10-23
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多