给定一组 N 个区间:对于每个区间,哪个区间的重叠最大?
例如 { [0,5], [2,9], [2,3], [4,9] } :
[0,5]:[2,9](重叠 4)
[2,9]:[4,9](重叠 6)
[2,3]:[0,5] 或 [2,9](重叠 2)
[4,9]:[2,9](重叠 6)
N 可以很大,所以我认为间隔树是必要的。但是,我发现没有任何帖子或出版物描述了此类查询的方法。查询的结果可以位于区间树节点的 3 条路径中的任何一条上(中心左侧、中心重叠、中心右侧),因为它们可能包括也可能不包括查询区间的中心点。因此,我想不出一个 log(N) 遍历方法来获得结果。
此外,对于 [2,3] 的情况,我不在乎选择哪个。可以任意选取任何最大相交区间。每个查询仅返回 1 个结果。
是否可以在 log(N) 中回答每个查询,提供 Nlog(N) 整体解决方案?
编辑:我制定的伪代码:
query(ITnode node, Interval intrv){
// s_list: start-sorted intervals overlapping center
// e_list: end-sorted intervals overlapping center
if intrv.end < node.center:
node_max = search node.s_list for interval w/ closest start to intrv.start
return max(node_max, query(node.left_tree, intrv))
else if intrv.start > node.center:
node_max = search node.e_list for interval w/ closest end to intrv.end
return max(node_max, query(node.right_tree, intrv))
else: // Query overlaps center
// Still working this out but I get the picture now
}
for each Interval i:
result[i.id] = query(root, i)