使用间隔树的最大间隔重叠[关闭]

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 treeQuery() - 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/。它向您展示了如何做到这一点。你可以对红黑树做同样的事情。

【讨论】:

以上是关于使用间隔树的最大间隔重叠[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

对具有重叠事件的稀疏时间序列数据的时间间隔求和

检查一个列表的间隔是不是与另一个列表的间隔重叠

如何计算 BigQuery 中日期间隔联合的重叠

熊猫将时间间隔重叠到时间序列

折叠和合并重叠的时间间隔

在 Oracle 中对重叠的时间间隔进行分组