【问题标题】:Faster Queries in plane平面查询更快
【发布时间】:2017-01-15 01:11:37
【问题描述】:

问题 我必须支持对位于 [0,M]x[0,M] 的笛卡尔平面中的一组 n 二维点的 Q 查询。积分是提前给的。

每个查询都要求我计算矩形 (x1,y1)*(x2,y2) 中的点数。 (轴对齐矩形)。

约束
0

我想进一步了解所使用的算法。我们是否可以使用预先给出所有点和查询以及点的坐标有界等信息更有效地执行这些查询。

变体:我们能否在数据结构中添加 n 个轴对齐的矩形点块作为 n 个添加操作,而不是从 n 个点开始,然后回答相同的查询。 [惰性分段树的一种方法]。

【问题讨论】:

    标签: algorithm optimization query-optimization computational-geometry kdtree


    【解决方案1】:

    这是一个经典的 2d Binary Indexed Tree 问题。二叉索引树可以为您提供从 (0,0) 到 (x,y) 的矩形中有多少个点,现在如果您想找出由 (x1,y1) 和 (x2) 指示的矩形中有多少个点,y2),首先你必须找到矩形另外两个角点的坐标。设 pUL、pUR、pBL、pBR 为矩形的四个角点,分别代表左上角、右上角、左下角和右下角。通过使用包含-排除逻辑,此矩形中包含的点数为。

    q(p) // query on 2D-BIT for point p which gives how many dots are in 
         // rectangle represented by (0,0) and (p.x, p.y)
    result = q(pUR)-q(pUL)-q(pBR)+p(pBL)
    

    【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2012-05-27
    相关资源
    最近更新 更多