15个版本
0.1.14 | 2024年2月24日 |
---|---|
0.1.13 | 2023年12月26日 |
0.1.12 | 2023年10月26日 |
0.1.11 | 2023年8月7日 |
0.1.1 | 2023年5月30日 |
#416 在 数据结构
每月下载量738
在 6 个crate(5个直接) 中使用
560KB
8K SLoC
csf
是由 Piotr Beling 开发的 Rust 库(压缩静态函数)。
csf
包含以下实现静态函数的类型: ls::Map
, fp::Map
. 它们可以表示从一组(可哈希)键到给定位大小的无符号整数的函数(不可变映射)。表示从 n 个元素的集合到 b 位值集的函数需要超过 nb 位。它们构造和评估的期望时间复杂度分别为 O(n) 和 O(1)。
csf
包含以下实现压缩静态函数的类型: ls::CMap
, fp::CMap
, fp::GOCMap
. 它们可以表示从一组(可哈希)键到任何类型值集的函数(不可变映射)。为了表示函数 f:X→Y,它们使用略大于 |X|H 的空间,其中 H 是 f 值在 X 上的分布的熵。它们的期望时间复杂度是评估的 O(c) 和构造的 O(|X|c)(不计构建编码字典),其中 c 是值的平均码字长度(在代码片段中给出)。
在 csf
中包含的所有静态函数(包括压缩函数)都没有显式存储键。因此,这些函数通常无法检测到某个项目是否属于它们构造的键集合。因此,查询属于该集合之外的项目分配的值时,它们可以返回任何值。
示例
use csf::ls;
let subset: ls::Map = [("alpha", 1u8), ("beta", 0), ("gamma", 1)].as_ref().into();
assert_eq!(subset.get(&"alpha"), 1);
assert_eq!(subset.get(&"beta"), 0);
assert_eq!(subset.get(&"gamma"), 1);
// Any 1-bit value (either 0 or 1) can be returned for other arguments:
assert!(subset.get(&"other") <= 1);
依赖关系
~1.5MB
~26K SLoC