1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2018 年 9 月 28 日 |
---|
#2313 在 数据结构
47KB
750 行
cuml_map
该库的目标是提供允许高效创建和查询累积映射的数据结构。也就是说,对于某些映射 K -> V
,我们希望用户能够快速高效地询问以下问题
- 与键
k
关联的值是什么? - 与键
<= k
关联的所有值的总和是多少? - 第一个键
k
,其所有值的总和<= k
大于或等于某个值v
?
这些查询被抽象到 CumlMap
特质中,该特质的定义如下
pub trait CumlMap {
type Key;
type Value;
fn insert(&mut self, Self::Key, Self::Value);
fn get_cuml(&self, Self::Key) -> Self::Value; // Question 2
fn get_single(&self, Self::Key) -> Self::Value; // Question 1
fn get_quantile(&self, Self::Value) -> Option<Self::Key>; // Question 3
}
此外,还提供了三种该特质的实现
FenwickTree
实现了一个非常高效的基于数组的映射1,其中Key=usize
。ExtensibleFenwickTree
实现了 (1) 的包装,允许其动态调整大小,并接受可能为负的键。CumlTree
使用基于红黑树的结构来泛化到任何有序键,对于稀疏键,它将比其他两个更加节省空间。
1 Peter M. Fenwick (1994). "A new data structure for cumulative frequency tables" (PDF). Software: Practice and Experience. 24 (3): 327–336. CiteSeerX 10.1.1.14.8917 Freely accessible. doi:10.1002/spe.4380240306
依赖关系
~155KB