#map #compression #hashing #perfect #dictionary #mphf #set-key

csf

使用完美哈希和价值压缩的压缩静态函数(映射)库

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数据结构

Download history 150/week @ 2024-04-23 157/week @ 2024-04-30 158/week @ 2024-05-07 182/week @ 2024-05-14 385/week @ 2024-05-21 205/week @ 2024-05-28 295/week @ 2024-06-04 185/week @ 2024-06-11 102/week @ 2024-06-18 196/week @ 2024-06-25 101/week @ 2024-07-02 161/week @ 2024-07-09 203/week @ 2024-07-16 183/week @ 2024-07-23 249/week @ 2024-07-30 75/week @ 2024-08-06

每月下载量738
6 个crate(5个直接) 中使用

MIT/Apache

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 的空间,其中 Hf 值在 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