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..101
two_slices_big2
,第一个包含0..100
,第二个包含51..151
two_slices_big3
,第一个包含0..100
,第二个包含100..200
three_slices_big
,第一个包含0..100
,第二个包含1..101
,第三个包含2..102
three_slices_big2
,第一个包含0..100
,第二个包含34..134
,第三个包含67..167
three_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