|
|
1
17
听起来你只需要一个 平衡二叉树 例如,将{(1,4)、(8,10)、(12,15)}表示为包含1、4、8、10、12和15的树。 每个节点都需要说明它是间隔的开始还是结束。因此:
增加间隔 :
(免责声明:如果你在C++中做了明确的内存管理,你可能最终释放出比O(log n)多的内存块,但实际上,释放一个节点需要花费多少钱给那些添加它的人,我想。) 删除间隔 基本上是一样的。 检查点或间隔 这是直截了当的。 在给定时间后找到至少一个给定大小的第一个间隙
要查找给定时间后出现的给定大小的第一个间隙,请首先在树中查找该时间。然后向上走,直到到达声称包含足够大间隙的节点。如果你从右边上来,你知道这个缺口在左边,所以你忽略它,继续往上走。否则你是从左边来的。如果节点是起始节点,请检查其左侧的间隙是否足够大。如果是这样,你就完了。否则,足够大的间隙必须位于右侧的某个位置。向右走,然后继续往下走,直到找到缺口。同样,因为树的高度是O(logn),所以走三次(向下,向上,可能再向下)就是O(logn)。 |
|
|
2
7
Interval Trees
. 区间树是一种特殊的一维更一般的情况
kd-trees
,并有一个
|
|
|
3
1
我知道你已经接受了一个答案,但是既然你指出你可能会在C++中实现,你也可以看看升空间隔容器库。 http://www.boost.org/doc/libs/1_46_1/libs/icl/doc/html/index.html |
|
4
1
|
|
|
5
1
它执行所有引用的操作:
|
|
|
bb ef · 如何使用递归从列表中删除某些内容?python 8 年前 |
|
|
Adam Morad · 方案更改树值 8 年前 |
|
johnny 5 · 角度将ViewChild绑定到类中的属性 8 年前 |
|
|
user2467011 · 为什么给定的二叉树是用空节点构造的? 8 年前 |