#huffman #probability-distribution #decompression

huffman-compress

基于任意符号的概率分布进行Huffman压缩

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 压缩

Download history 16/week @ 2024-03-11 27/week @ 2024-03-18 15/week @ 2024-03-25 36/week @ 2024-04-01 8/week @ 2024-04-08 3/week @ 2024-04-15 23/week @ 2024-04-22 9/week @ 2024-04-29 4/week @ 2024-05-06 10/week @ 2024-05-13 20/week @ 2024-05-20 10/week @ 2024-05-27 15/week @ 2024-06-03 22/week @ 2024-06-10 19/week @ 2024-06-17 31/week @ 2024-06-24

每月88次下载
6 个crate中使用 (直接使用4个)

MIT/Apache

22KB
391

huffman-compress

基于任意符号的概率分布进行Huffman压缩。

Build Status crates.io docs.rs No Maintenance Intended

示例

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