11个不稳定版本 (4个重大更改)
0.17.5 | 2024年8月12日 |
---|---|
0.17.3 | 2024年8月11日 |
0.16.0 | 2024年8月4日 |
0.15.0 | 2024年8月4日 |
0.13.1 | 2020年7月18日 |
#398 在 数据结构 中
每月下载量:930
415KB
6.5K SLoC
概述
此库提供了对std Range
类型的一种替代方案,它支持有限区间标准化。当与有限的数据类型一起使用时,区间将支持集合操作(并集、交集等),并且可以高效地将不相交集合的区间表示为区间界限的树。
无穷区间的表示
此库最初旨在支持无穷和有限数据类型,使用特化特质使无穷区间的标准化成为无操作。为了允许稳定构建,此功能已被禁用,因此 Interval<T>
和 Selection<T>
仅在 T: Finite
时可用。因此,为选择和区间定义了许多方法,这些方法实际上是无用的,因为所有区间在构造后都将被标准化为闭表示。
什么是区间标准化?
区间标准化确保等效区间具有相同的表示。例如,如果我们有一个覆盖 (0, 15] 的 Interval<i32>
,左边界是排他的,由于 i32
的有限性,该区间等同于 [1, 15]。以这种方式,有限类型的区间始终可以‘标准化’为闭区间。此外,相邻区间的并集在未标准化时可能会重叠。 [0, 4] 并 [5, 6] 的并集选择了与 [0, 6] 相同的点,即使区间没有共享边界。因此,我们还需要根据集合操作对区间进行标准化。
如何实现区间标准化?
Interval<T>
通过对 RawInterval<T>
的封装实现为一个归一化包装器。任何实现了 Normalize
的类型,在进行 Interval<T>
上的操作后,都会自动进行归一化。通过 Selection<T>
实现区间动态联合,它是 TineTree<T>
的归一化包装器,确保在归一化之前,在尽可能广泛的“非归一化”区间集上执行区间操作。
依赖项
约 180KB