我想要做的是有效地处理间隔。例如,在我的示例中,间隔如下所示:
[10, 20], [15, 25], [40, 100], [5, 14]
区间是闭整数,有些区间可能会重叠。我想有效地找到给定查询的重叠间隔。例如,如果[16, 22]
给出:
[10, 20], [15, 25]
上述区间应计算为重叠区间。
我目前正在编写基于 Red-Black Tree 的区间树(参考:CLRS,Introduction to Algorithms)。虽然找到所有重叠的区间可以是 O(n),但运行时间应该更快。请注意,间隔可以删除和插入。
但是,我刚刚发现Boost有interval_map
并且interval_set
:
http: //www.boost.org/doc/libs/1_46_1/libs/icl/doc/html/index.html
我试过了,但这种行为对我来说很奇怪。例如,如果[2, 7]
先插入再[3, 8]
插入,则生成的映射将具有[2, 3)
、[3, 7]
和(7, 8]
。也就是说,当插入新的区间时,会自动完成拆分。
我可以关闭这个功能吗?或者,Boostinterval_map
适合我的目的?