Lobsters | 原文链接 | 2026-09-04 收录

从零手写一个压缩器:580 行 Rust 实现哈夫曼编码

来源: ochagavia.nl — 2026-09-02

概述

Adolfo Ochagavía 一篇信息论入门实践:从零写一个压缩/解压器。先用布尔数组示例说明压缩本质是'用更少字节传达同样信息'(8 个布尔存成 JSON 要 52 字节,按位存仅 1 字节)。通用压缩算法(如 gzip 的 DEFLATE)靠两招:用 LZ77 找重复字节串以更短标记代替,再用哈夫曼编码按出现频率给高频字节更短编码、低频字节更长编码。文中带一个可交互的哈夫曼 playground(输入文本即显示每个字节的频率、分配的比特串与压缩后体积),并强调哈夫曼树用图示比散文好懂。接着他把原理落地成 Adolfo's Basic Compressor(ABC):统计字节频率→用哈夫曼推导字节到位串的映射→依映射写出压缩流并把映射编码在输出头部;解压器镜像执行。全文仅 580 行无第三方依赖的 Rust,效果自然不如 gzip(某本书 622KB→366KB,某 Rust 二进制 90MB→73MB),但仍是「魔法」。文末致敬信息论导师 David MacKay 的讲座。

核心要点

金句

You wave a magic wand and —poof!— a file suddenly shrinks to a fraction of its size! But it all works with just 580 lines of dependency-free Rust code. To me, it still feels like magic.(挥一挥魔棒文件就缩成几分之一——而它只靠 580 行零依赖的 Rust 就实现了。在我看来这依旧是魔法。)
返回 Lobsters 首页