我已经搜索了一下这个主题,并在http://www.geeksforgeeks.org/
上找到了这个间隔树主要是几何数据结构,通常用于窗口查询,例如,查找矩形视口内的计算机化地图上的所有道路,或查找三维场景内的所有可见元素。
现在我的问题实际上分为两部分:
P.S:关于区间树上更多阅读材料的简要解释将受到欢迎
答案 0 :(得分:2)
在窗口查询中,给定一组线段和一个轴对齐的矩形,我们必须找到线段与矩形的交点。这可以通过将区间树与范围树结合使用来解决。
Range Trees是一种有效的数据结构,用于查找Range / Rectangle中存在的点集。因此,它们可用于查找所有线段,使得每个线段的一个端点出现在查询矩形中。这些对应于下图中的蓝线部分。
间隔树可用于查找与窗口重叠但其端点位于窗口外的那些段。这些是图中的红色部分。
在解决此问题之前,请设想一个问题的限制版本,其中所有线段都是水平或垂直的。在这种情况下,与矩形相交的任何水平线段应与矩形的左(和右)垂直边相交。如果我们将水平线段视为区间并将矩形的垂直边缘视为一个点,则问题是找到包含该点的所有区间。因此我们可以使用区间树来解决这个问题。同样,我们可以找到所有相交的垂直线段。
使用间隔树无法完美解决线段与轴平行的问题的一般版本。但是,我们可以使用区间树来消除绝大多数不与查询矩形重叠的线段。对于输入中的每个线段,我们构造一个轴平行矩形,其对角线是线段。然后,我们使用矩形的边构造(水平和垂直)间隔树。给定一个查询矩形R,我们可以像以前一样找到与R相交的所有矩形。相应的线段很有可能与R交叉,并且可以单独检查实际交叉点。
答案 1 :(得分:1)
也许不能直接回答你的问题,但我认为这可能会有所帮助:
围绕间隔搜索问题: 给定n个区间的集合S和查询点q,报告包含q的所有区间。
重叠间隔搜索问题: 给定n个区间的集合S和查询区间Q,报告S重叠Q中的所有区间。
参考(也与其他类似的数据结构比如分段树):http://www.iis.sinica.edu.tw/~dtlee/dtlee/CRCbook_chapter18.pdf