10个版本 (5个重大更新)
使用旧Rust 2015
0.6.1 | 2021年4月25日 |
---|---|
0.6.0 | 2019年6月2日 |
0.5.0 | 2018年5月10日 |
0.4.0 | 2018年3月5日 |
0.1.1 | 2018年1月29日 |
#153 in 压缩
每月88次下载
在 6 个crate中使用 (直接使用4个)
22KB
391 行
huffman-compress
基于任意符号的概率分布进行Huffman压缩。
示例
use std::iter::FromIterator;
use std::collections::HashMap;
use bit_vec::BitVec;
use huffman_compress::{CodeBuilder, Book, Tree};
let mut weights = HashMap::new();
weights.insert("CG", 293);
weights.insert("AG", 34);
weights.insert("AT", 4);
weights.insert("CT", 4);
weights.insert("TG", 1);
// Construct a Huffman code based on the weights (e.g. counts or relative
// frequencies).
let (book, tree) = CodeBuilder::from_iter(weights).finish();
// More frequent symbols will be encoded with fewer bits.
assert!(book.get("CG").map_or(0, |cg| cg.len()) <
book.get("AG").map_or(0, |ag| ag.len()));
// Encode some symbols using the book.
let mut buffer = BitVec::new();
let example = vec!["AT", "CG", "AT", "TG", "AG", "CT", "CT", "AG", "CG"];
for symbol in &example {
book.encode(&mut buffer, symbol);
}
// Decode the symbols using the tree.
let decoded: Vec<&str> = tree.decoder(&buffer).collect();
assert_eq!(decoded, example);
文档
更新日志
- 0.6.1
- 修复弃用警告并移除
#[deny(warnings)]
(库中的未来兼容性风险)。
- 修复弃用警告并移除
- 0.6.0
- 更新到
bit-vec
0.6。
- 更新到
- 0.5.0
- 更新到
bit-vec
0.5。
- 更新到
- 0.4.0
- 将
Tree::decoder()
重命名为Tree::unbounded_decoder()
以避免意外。新的Tree::decoder()
接受要解码的最大符号数量。 - 不再重新导出
Saturating
从 num-traits。
- 将
- 0.3.2
- 为Huffman树预先分配内存空间。
- 0.3.1
- 更新 num-traits 到 0.2 (semver兼容)。
- 0.3.0
- 引入
CodeBuilder
。 - 修改优先级断裂顺序。
- 引入
- 0.2.0
- 允许从迭代器初始化而不创建
HashMap
。感谢 @mernen。 - 对于符号,要求
K: Ord
而不是K: Hash + Eq
,并将Book
内部从HashMap
切换到BTreeMap
。 - 指定稳定性保证。
- 允许从迭代器初始化而不创建
- 0.1.1
- 在
Book
上暴露更多方法。
- 在
- 0.1.0
- 首次发布。
许可证
huffman-compress 在 Apache 2.0 和 MIT 许可证下双授权,由您选择。
依赖项
~245KB