我想要做的是高效地处理区间。例如,在我的例子中,区间如下所示:
[10, 20],[15, 25],[40, 100],[5, 14]
区间是闭合和整数的,一些区间可能重叠。我想要有效地查找给定查询的重叠区间。例如,如果给定[16, 22]:
[10, 20],[15, 25]
上述区间应被计算为重叠区间。
我目前正在编写基于红黑树的区间树(参考:CLRS,《算法导论》)。虽然找到所有重叠区间可以是O(n),但运行时间应该更快。请注意,区间可以被删除和插入。
然而,我刚刚发现 Boost 有
我能关闭这个功能吗?或者,Boost的
[10, 20],[15, 25],[40, 100],[5, 14]
区间是闭合和整数的,一些区间可能重叠。我想要有效地查找给定查询的重叠区间。例如,如果给定[16, 22]:
[10, 20],[15, 25]
上述区间应被计算为重叠区间。
我目前正在编写基于红黑树的区间树(参考:CLRS,《算法导论》)。虽然找到所有重叠区间可以是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]
。也就是说,当插入新间隔时,自动进行分割。我能关闭这个功能吗?或者,Boost的
interval_map
适合我的目的吗?