【问题标题】:Practical Applications of Interval Tree区间树的实际应用
【发布时间】:2015-04-15 14:33:40
【问题描述】:

我在 Google 上搜索了一下这个主题,并在 http://www.geeksforgeeks.org/ 上找到了这个

区间树主要是一种几何数据结构,常用于窗口查询,例如,在计算机化地图上查找矩形视口内的所有道路,或查找三维场景内的所有可见元素。

现在我的问题实际上分为两部分:

  • 如何使用区间树在计算机地图上查找所有道路?
  • 还有哪些区间树的实际应用示例?

P.S:欢迎参考更多关于区间树的阅读材料进行简要说明

【问题讨论】:

    标签: data-structures tree interval-tree


    【解决方案1】:

    在窗口查询中,给定一组线段和一个轴对齐的矩形,我们必须找到线段与矩形的交点。这可以通过将区间树与范围树结合使用来解决。

    范围树是一种有效的数据结构,用于查找范围/矩形中存在的点集。因此它们可用于查找所有线段,使得每个线段的端点之一出现在查询 Rectangle 中。这些对应于下图中的蓝色线段。

    区间树可用于查找与窗口重叠但端点在窗口外的那些段。这些是图中的红色部分。

    在解决这个问题之前,想象一个更受限制的问题版本,其中所有线段都是水平或垂直的。在这种情况下,与矩形相交的任何水平线段都应与矩形的左(和右)垂直边缘相交。如果我们将水平线段视为区间,将矩形的垂直边缘视为一个点,那么问题就是要找到包含该点的所有区间。因此我们可以使用区间树来解决这个问题。同样我们可以找到所有相交的垂直线段。

    使用区间树无法完美解决线段与轴不平行的问题的一般版本。但是,我们可以使用区间树来消除绝大多数不与查询矩形重叠的线段。对于输入中的每个线段,我们构造一个轴平行矩形,其对角线是线段。然后我们使用矩形的边构造(水平和垂直)区间树。给定一个查询矩形 R,我们可以像以前一样首先找到与 R 相交的所有矩形。对应的线段与R相交的几率很高,可以单独检查实际相交。

    【讨论】:

      【解决方案2】:

      也许不能直接回答您的问题,但我认为它可能会有所帮助:

      封闭区间搜索问题: 给定一组包含 n 个区间的 S 和一个查询点 q,报告所有包含 q 的区间。

      重叠区间搜索问题: 给定一组包含 n 个区间的 S 和一个查询区间 Q,报告 S 重叠 Q 中的所有这些区间。

      参考(也与其他类似的数据结构如段树进行比较):http://www.iis.sinica.edu.tw/~dtlee/dtlee/CRCbook_chapter18.pdf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2014-12-19
        相关资源
        最近更新 更多