12个版本
0.3.1 | 2022年1月23日 |
---|---|
0.3.0 | 2022年1月23日 |
0.2.4 | 2022年1月22日 |
0.2.3 | 2021年8月11日 |
0.1.2 | 2021年5月27日 |
1486 in 数据结构
31 monthly downloads
2.5MB
4K SLoC
SDSL-RS
紧凑数据结构库的Rust接口 (SDSL-lite)。
简介
SDSL-lite 是一个C++11库,它实现了紧凑数据结构。例如结构包括:任意宽度的整数向量、小波树和压缩后缀数组。该库在生物信息学等领域中得到广泛应用。
该库提供的许多数据结构都是使用C++ 模板 定义的。当从非C++语言与库进行接口时,这提出了挑战。SDSL-RS的主要目标是从Rust语言中与库进行接口的繁重工作!
进展
以下列表包括所有将要支持的结构。该列表是从这里找到的cheatsheet中派生出来的。
列表中已勾选的项目目前已被支持。近期目标是支持每个部分的每个数据结构。
请联系聊天频道以进行优先级请求。
完整结构状态列表
整数向量
- IntVector
位向量
- BitVector (普通位向量)
- BitVectorIl (交错位向量)
- RrrVector (H0压缩位向量)
- SdVector (稀疏位向量)
- HybVector (混合位向量)
排名支持
- RankSupportV
- RankSupportV5
- RankSupportScan
- RankSupportIl
- RankSupportRrr
- RankSupportSd
- RankSupportHyb
选择支持
- SelectSupportMcl
- SelectSupportScan
- SelectSupportIl
- SelectSupportRrr
- SelectSupportSd
小波树
- WtHuff
- WtInt
- WtRlmn
- WtGmr
- WtAp
- WmInt
- WtBlcd
- WtHutu
压缩后缀数组
- CsaBitcompressed
- CsaSada
- CsaWt
最长公共前缀数组
- LcpBitcompressed
- LcpDac
- LcpByte
- LcpWt
- LcpVlc
- LcpSupportSada
- LcpSupportTree
- LcpSupportTree2
平衡括号支持
- BpSupportG
- BpSupportGg
- BpSupportSada
压缩后缀树
- CstSada
- CstSct3
范围最小/最大查询
- 支持稀疏表(RmqSupportSparseTable)
- 简明RmqSuccintSada
- 简明RmqSuccintSct
需求
SDSL-lite
SDSL-lite必须在开发环境中可编译。需求信息请参阅此处。
常见的缺失依赖包括libdivsufsort-dev
。
SDSL-RS
SDSL-RS
使用了const generics,因此可能需要Rust 工具链的beta版本。
使用SDSL-RS
的项目必须包含一个构建脚本(build.rs
),内容如下
// build.rs
fn main() {
match sdsl::build() {
Ok(_) => {}
Err(e) => panic!("Error: {}", e),
};
}
因此,项目的Cargo.toml
文件必须包含一个build-dependencies
部分,例如
[dependencies]
sdsl = "0.3.0"
# ... other dependencies ...
[build-dependencies]
sdsl = "0.3.0"
sdsl::build()
函数调用允许SDSL-RS
分析当前项目的代码库(通过MIR)并在顶级target
目录中构建适当的接口。添加SDSL-RS
后的项目初始编译需要一些时间,因为SDSL-lite
作为依赖项进行编译。后续编译应该很快。
示例
一个示例项目可以在此处找到。它包含所有支持的数据结构的示例。
此示例展示了如何构建一个H0压缩位向量(sdsl::bit_vectors::RrrVector
)
let bv = sdsl::bit_vector! {1, 1, 0, 1};
let rv = sdsl::bit_vectors::RrrVector::<sdsl::int_vectors::IntVector<0>, 10, 2>::new(&bv)?;
let result = rv.get_bv_element(2);
let expected = 0;
assert_eq!(result, expected);
依赖
~7–17MB
~215K SLoC