#structure #index #in-memory #hash #filter #bigsi-like

bigsi_rs

一个内存中的BIGSI-like数据结构的实现

2个版本

0.1.1 2023年3月30日
0.1.0 2020年2月15日

#2006数据结构

每月 下载 23

MIT 许可证

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