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数据结构

Download history 1/week @ 2024-07-22 278/week @ 2024-07-29 387/week @ 2024-08-05 264/week @ 2024-08-12

每月下载量:930

MIT/Apache

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