【发布时间】:2009-12-30 20:48:36
【问题描述】:
我有一系列不能重叠的时间间隔(t_start,t_end),即:t_end(i) > t_start(i+1)。我想做以下操作:
1) 添加新的(并集)区间 [ {(1,4),(8,10)} U (3,7) = {(1,7),(8,10)} ]
2) 取出间隔 [ (1,7) - (3,5) = {(1,3),(5,7)}
3)检查一个点或一个区间是否与我的系列中的一个区间重叠(交集)
4) 在某个点 [ {(1,4),(7,8)} 之后找到第一个最小长度的“非区间”:在 4 和 7 之间有一个长度为 3 的“非区间”]。
我想知道实现这一点的好方法,复杂度低(所有操作的 log n 都可以做到)。
【问题讨论】:
-
你可能会提到你打算使用什么语言,如果有的话。这可能有助于我们缩小您的搜索范围。
-
我打算使用 C++,但我很乐意自己实现数据结构,而不依赖于 STL 或其他任何东西。所以这是一个“语言无关”的问题! :)
标签: algorithm data-structures tree intervals