20个版本
使用旧的Rust 2015
0.6.4 | 2023年9月16日 |
---|---|
0.6.3 | 2020年2月16日 |
0.6.2 | 2019年7月26日 |
0.5.4 | 2019年1月4日 |
0.1.3 | 2017年6月15日 |
#120 在 数据结构
26,400 每月下载量
在 179 个crate中使用了(直接使用25个)
87KB
2K SLoC
hibitset
提供分层位集合,允许在稀疏数据结构上非常快速地进行迭代。
使用方法
只需将此添加到您的 Cargo.toml
[dependencies]
hibitset = "0.6"
许可证
本库采用Apache License 2.0授权,有关更多信息,请参阅LICENSE文件。
lib.rs
:
hibitset
提供分层位集合,允许在稀疏数据结构上非常快速地进行迭代。
它的功能
BitSet
可以被视为类似于 HashSet<u32>
。它跟踪某些索引是否存在于其中。然而,其实现方式非常不同。
在本质上,BitSet
依赖于一个位数组,该数组表示索引是否存在。这提供了添加和删除索引的功能。
这个数组被称为层0。在其上方,还有另一层:层1。层1是层0的“摘要”。它包含每个 usize
位的一个位。如果层0中的那个 usize
中的任何位被设置,层1中的位也会被设置。
总共有四层。层1到层3是每一层的摘要。
Example, with an imaginary 4-bit usize:
Layer 3: 1------------------------------------------------ ...
Layer 2: 1------------------ 1------------------ 0-------- ...
Layer 1: 1--- 0--- 0--- 0--- 1--- 0--- 1--- 0--- 0--- 0--- ...
Layer 0: 0010 0000 0000 0000 0011 0000 1111 0000 0000 0000 ...
该方法使得在整个 BitSet
上进行的操作(如并集、交集和迭代)非常快速(因为如果任何摘要层的任何位为零,可以跳过其下整个位域范围。)
然而,索引大小有一个最大限制。BitSet 的顶层(第 3 层)是一个单一的 usize
。这使得最大索引为 usize**4
(对于 32 位 usize
为 1,048,576
,对于 64 位 usize
为 16,777,216
)。尝试添加比这更大的索引将导致 BitSet
发生 panic。
依赖关系
~0–265KB