18个版本
| 0.4.0 | 2020年2月18日 |
|---|---|
| 0.3.6 | 2019年12月11日 |
| 0.3.4 | 2019年11月10日 |
| 0.3.2 | 2019年5月21日 |
| 0.3.0 | 2018年11月4日 |
#871 在 算法
87 每月下载量
145KB
3K SLoC
SdSet
将集合理论应用于排序和去重切片。性能极高!太棒了!
sdset 代表 sorted-deduplicated-slices-set,这有点太长了。
性能
关于测试的说明,测试在整数范围内进行,如果以
two_slices_big结尾,第一个切片包含0..100,第二个包含1..101two_slices_big2,第一个包含0..100,第二个包含51..151two_slices_big3,第一个包含0..100,第二个包含100..200three_slices_big,第一个包含0..100,第二个包含1..101,第三个包含2..102three_slices_big2,第一个包含0..100,第二个包含34..134,第三个包含67..167three_slices_big3,第一个包含0..100,第二个有100..200,第三个有200..300
当这些整数运行切片重叠时,它们非常有用,我们可以看到当切片的不同部分重叠时性能如何变化。
有关“为什么没有真正的超大切片基准测试?”的更多信息,您可以查看 我在 /r/rust 上的回答。
要运行基准测试,您必须启用 unstable 功能。
$ cargo bench --features unstable
请注意,sdset 集合操作不需要许多分配,因此它具有明显的优势。更多信息请参阅基准测试方差。
_btree 是使用两个或三个 BTreeSet 的基准测试,这些 BTreeSet 包含整数运行(见上文),不将 BTreeSet 的创建考虑在内。在集合上执行集合操作,并将结果累积到最终的 Vec 中。
_fnv 是使用两个或三个 HashSet 的基准测试,这些 HashSet 包含整数运行(见上文),它使用 一个名为 fnv 的自定义 Hasher,该哈希器针对小值如整数进行了优化,不将 HashSet 的创建考虑在内。在集合上执行集合操作,并将结果累积到最终的 Vec 中。
_vec 基准测试仅适用于并集集合操作,它由一个 Vec 组成,该 Vec 用两个或三个切片(见上文)的元素填充,排序并去重。
duo 和 multi 测量是此crate的一部分实现,第一个只能对两个集合执行集合操作,第二个可用于任意数量的集合。
直方图
可以通过执行以下命令生成直方图:
$ export CARGO_BENCH_CMD='cargo bench --features unstable'
$ ./gen_graphs.sh xxx.bench
这使阅读统计信息更加容易,并可以看到 sdset 在已排序和去重的切片上比任何其他类型的集合都更加高效。




依赖项
~170KB