【发布时间】:2023-03-28 14:15:01
【问题描述】:
我想做的是有效地处理间隔。例如,在我的示例中,间隔如下所示:
[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 是否适合我的目的?
【问题讨论】:
标签: c++ algorithm boost data-structures boost-icl