【发布时间】:2010-09-20 20:49:00
【问题描述】:
这里有一个有趣的问题:给定一组 N 个区间([start, end]),使用区间树找出重叠区间的最大数量。
StackOverflow 上的similar question 提供了一个 O(N) 解决方案,但如果我们可以将区间预处理成区间树,或许我们可以在对数时间内找到解决方案。
事实上,Cormen 等人在“算法简介”一书中的一个练习问题表明,这可以通过增加红黑区间树来实现。任何想法如何做到这一点?
【问题讨论】:
-
您对
Add(x, y) - add an interval to the tree、Query() - find the maximum number of overlapping intervals等操作感兴趣吗?你也想要Del(x, y) - delete the interval [x, y] from the tree吗? -
如果区间排列在一个平衡的区间树中,例如 Cormen 书中提供的树,那么我们已经知道 Add(interval) 和 Delete(interval) 运行时间为 O(lg N)。所以我想知道如何使用这棵树在 O(lg N) 时间内找到最大重叠间隔数。
-
你能定义重叠吗?也就是说,您是指一组具有共同点的区间,还是指一组区间,使得任何一对之间都存在重叠路径?
-
这里的重叠应该是指一个区间的结束时间>=另一个区间的开始时间。