3 个版本
0.1.2 | 2023年1月23日 |
---|---|
0.1.1 | 2022年10月19日 |
0.1.0 | 2022年10月11日 |
在 数据结构 中排名第 381
每月下载量 17,869
在 42 个crate中(4个直接使用)
21KB
379 行
prefix-sum-vec
这是一个Rust crate,用于压缩存储高度重复的元素,具有 O(log n)
查询
这是什么?
此crate提供的数据结构允许用户以空间高效的方式存储相同值的重复序列。这种数据结构的一个例子出现在WebAssembly中,其中函数的局部变量被表示为类型序列及其重复次数。例如,这些函数局部变量的二进制编码
(locals i32 i32 i32 i32 i64 i64 f64)
实际上编码为以下序列:0x04 i32 0x02 i64 0x01 f64
。如果将局部变量的解码表示简单地放入向量中,可能会出现潜在的拒绝服务危险。一个精心设计的输入,其中包含数百万个局部变量的表示仅占用几个字节的编码空间,将迫使简单的实现分配数GB的内存空间。
此crate提供的数据结构存储一个重复元素的副本以及元素可找到的索引的前缀和。因此,给定上面的局部变量示例,存储将类似于以下内容
[(4, i32), (6, i64), (7, f64)]
从那时起,使用索引5查找元素,只需在索引的前缀和上进行二分查找即可。
用法
首先,在您的 Cargo.toml
中指定此crate
[dependencies]
prefix-sum-vec = "0.1"
此crate旨在非常轻量级且直接。因此,目前没有可选功能可以启用。然后,参考 PrefixSumVec
类型的文档,以了解其在代码中的使用。
许可证
该项目根据您的选择在Apache 2.0 OR BSD 3-clause许可证下授权。