> shannon | fano | entropy <
// Shannon-Fano —— 用于数据压缩的自顶向下熵编码
[ENTROPY]
基于熵的编码
使用信息论构造高效的可变长度前缀码。
[TOP-DOWN]
自顶向下算法
递归地按概率将符号划分为两组,接近等概率。
[HISTORIC]
经典历史算法
对现代压缩算法(如 Huffman)有重要启发作用。
>> 技术细节
Shannon-Fano 的工作原理:
Shannon-Fano 编码先根据频率对符号排序,然后将其递归地拆分为两组,使两组的总概率尽量接近。每一次拆分都会在码字后追加一位(左组为 0,右组为 1),最终得到一组前缀无歧义的可变长编码。
编码过程示例:
文本: "AAABBCD" 频率: A:3, B:2, C:1, D:1 拆分: [A] | [B,C,D] 码字: A: 0 B: 10 C: 110 D: 111 编码结果: 0 0 0 10 10 110 111
为什么使用 Shannon-Fano:
- >实现简单,适合教学与实验
- >具备不错的压缩率
- >有重要的历史与理论价值
- >帮助理解熵编码与前缀码
- >适合作为 Huffman 之前的过渡概念
>> 常见问题
什么是 Shannon-Fano 编码?
Shannon-Fano 编码是一种基于熵的编码技术,由 Claude Shannon 和 Robert Fano 在 20 世纪 40 年代提出。它是最早使用“按概率分配可变长码字”的算法之一。
Shannon-Fano 和 Huffman 有什么区别?
两者都生成可变长编码,但 Huffman 编码在平均码长上是最优的,而 Shannon-Fano 更简单,结构上接近直观的“按概率二分”。实践中通常采用 Huffman,但学习 Shannon-Fano 有助于理解 Huffman 的设计思想。
符号是如何被拆分的?
首先按频率对符号排序,然后按总概率将它们划分为两组,使两组概率尽量接近。之后对每一组重复该过程,直到每组只剩一个符号为止。
Shannon-Fano 现在还在用吗?
在实际工程中,Shannon-Fano 已几乎完全被 Huffman 编码等更优方法取代。现在它主要作为历史与教学示例,用来解释熵编码、前缀码和数据压缩的核心概念。