2个版本
0.1.1 | 2023年3月30日 |
---|---|
0.1.0 | 2020年2月15日 |
#2006 在 数据结构 中
每月 下载 23 次
12KB
173 行
bigsi_rs
Rust内存中的BIGSI-like数据结构实现
Rust内存中的BIGSI-like数据结构实现 (见 https://www.nature.com/articles/s41587-018-0010-1). 与布隆过滤器类似;布隆过滤器可以判断一个元素是否属于之前索引的单个集合,而BIGSI-like数据结构可以有效地判断一个元素是否属于多个查询集合。参数(特别是索引大小和哈希数量)应根据保证(下游)应用程序可接受的误报概率来选择。我的策略是基于要索引的最大集合,并使用Goel和Gupta 2010年的公式(《https://web.stanford.edu/~ashishg/papers/inverted.pdf》)来计算该集合的误报概率,从而计算索引的最大误报概率。
示例
use bigsi_rs;
//create a new index of size 250,000, 10 accessions and 3 hash functions
let mut new_filter = bigsi_rs::Bigsi::new(250000, 10, 3);
//insert words in index for accessions 0, 3 and 7
new_filter.insert(0, "ATGT");
new_filter.insert(3, "ATGT");
new_filter.insert(7, "ATGT");
//shrink uninformative elements in index
new_filter.slim();
assert_eq!(new_filter.get("ATGT").len(), 3 as usize);
assert_eq!(new_filter.get("ATGC").len(), 0 as usize);
依赖项
~1.3–2.2MB
~47K SLoC