1 个不稳定版本
| 0.3.1 | 2024 年 4 月 26 日 |
|---|
#42 在 #fork
用于 sbwt
445KB
7.5K SLoC
Simple-sds-sbwt
这是 sbwt crate 中使用的 simple-sds 衍生版本。
简单的简洁数据结构
这些结构与 SDSL 中的结构在性能和可扩展性方面相当。由于关注的是(相对)简单,因此通常避免低级优化。
实现的功能
整数向量
RawVector:支持一次读取、写入和追加 1-64 位的位数组。在Vec<u64>之上实现。RawVectorWriter:是RawVector的只写版本,直接将结构写入文件。RawVectorMapper:是不可变内存映射的RawVector。
IntVector:在RawVector之上实现的固定宽度整数位打包向量。类似于sdsl::int_vector,但也支持栈功能。IntVectorWriter:是IntVector的只写版本,直接将结构写入文件。类似于sdsl::int_vector_buffer的一个子集。IntVectorMapper:是不可变内存映射的IntVector。
WaveletMatrix:固定宽度整数的不可变向量。类似于sdsl::wm_int。- 支持
rank()、inverse_select()、select()、predecessor()和successor()等每个项值。 - 遍历所有项以及具有指定值的项。
- 使用每个级别的
BitVector实现。
- 支持
位向量
BitVector:一个普通的不可变位向量。- 支持使用可选支持结构的
rank()、rank_zero()、select()、select_zero()、predecessor()和successor()查询。 - 支持对集合位、未设置位和所有位的迭代器。
- 在
RawVector上实现。
- 支持使用可选支持结构的
RLVector:一种运行长度编码的位向量。- 支持
rank()、rank_zero()、select()、select_zero()、predecessor()和successor()查询。 - 支持集合位和所有位的迭代器。
- 使用
RLBuilder进行空间高效的构建。
- 支持
SparseVector:一种 Elias-Fano 编码的位向量。- 支持
rank()、rank_zero()、select()、select_zero()、predecessor()和successor()查询。 - 支持集合位和所有位的迭代器。
- 使用
SparseBuilder进行空间高效的构建。
- 支持
计划的功能
整数向量
- 可变内存映射向量。
位向量
predecessor()和successor()的版本,返回值而不是迭代器?- 基于迭代器的类似切片的功能?
备注
- 包含的
.cargo/config.toml将目标 CPU 设置为native。 - 此 crate 是为具有 BMI2 指令集的 x86_64 架构设计的(Intel Haswell / AMD Excavator 或更高版本)。某些操作可能在没有 POPCNT、LZCNT、TZCNT 和 PDEP 指令的情况下较慢。
- 也支持 64 位 ARM。
- 需要类 Unix 操作系统才能使用
mmap()。 - 如果系统不是小端字节序或者如果
usize不是 64 位,则可能无法正常工作。
依赖项
~0.4–340KB