使用间隔树的最大间隔重叠[关闭]
Posted
技术标签:
【中文标题】使用间隔树的最大间隔重叠[关闭]【英文标题】:Maximum interval overlaps using an interval tree [closed] 【发布时间】:2010-09-20 20:49:00 【问题描述】:这里有一个有趣的问题:给定一组 N 个区间([start, end]),使用区间树找出重叠区间的最大数量。
*** 上的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) 时间内找到最大重叠间隔数。
你能定义重叠吗?也就是说,您是指一组具有共同点的区间,还是指一组区间,使得任何一对之间都存在重叠路径?
这里的重叠应该是指一个区间的结束时间>=另一个区间的开始时间。
【参考方案1】:
look 的一些示例。您可以为此使用区间树。 CGAL 为您提供了一个强大的实现。另一个有趣的example 类似于你的问题。
【讨论】:
【参考方案2】:您可以在此处找到基于增强 AVL 自平衡树的区间树:http://code.google.com/p/intervaltree/。它向您展示了如何做到这一点。你可以对红黑树做同样的事情。
【讨论】:
以上是关于使用间隔树的最大间隔重叠[关闭]的主要内容,如果未能解决你的问题,请参考以下文章