是否有数据结构可以维护一组独特的范围,合并一个连续或重叠的范围?我需要跟踪哪些范围已经被处理,但是这可能以任意顺序发生。例如:python - 独特的一组范围,在需要时合并
range_set = RangeSet() # doesn't exist that I know of, this is what I need help with
def process_data(start, end):
global range_set
range_set.add_range(start, end)
# ...
process_data(0, 10)
process_data(20, 30)
process_data(5, 15)
process_data(50, 60)
print(range_set.missing_ranges())
# [[16,19], [31, 49]]
print(range_set.ranges())
# [[0,15], [20,30], [50, 60]]
请注意,重叠或连续范围会合并在一起。做这个的最好方式是什么?我看着使用平分模块,但它的使用似乎并不明显。
名为'Interval Tree'的数据结构可以帮助你做到这一点 - 它允许基于范围的查询和插入。据我所知,有多个软件包,例如https://pypi.python.org/pypi/intervaltree/2.0.4 –
如果'Interval Tree'太复杂,写一个类可能不会太困难。 –
对于某些算法,例如[Python - 删除重叠列表](http://stackoverflow.com/q/16312871/4279),您可以使用'SortedSet'和一个特殊的'OverlappingIntervalsUpdator'。有点相关:合并离散集合,你可以[使用“不相交集合”(又名UnionFind结构)或连接组件(在图中)](http://stackoverflow.com/questions/23160812/finding-common-elements-in -list式的Python#comment35423298_23160812)。 – jfs