27、哈夫曼编码:数据压缩的经典算法

哈夫曼编码:数据压缩的经典算法

1. 哈夫曼编码简介

哈夫曼编码是一种基于最小冗余编码的算法,也是最古老、最优雅的数据压缩形式之一。最小冗余编码的核心思想是:如果我们知道不同符号在一组数据中出现的频率,就可以用更少的空间来表示这些数据。具体做法是,用较少的比特位来编码出现频率高的符号,用较多的比特位来编码出现频率低的符号。这里的符号不一定是文本字符,可以是任意选定的数据量,通常为一个字节。

2. 熵与最小冗余

熵是衡量一组数据信息含量的指标。一组数据的熵是其每个符号熵的总和。符号 $z$ 的熵 $S_z$ 定义为:$S_z = -lgP_z$,其中 $P_z$ 是 $z$ 在数据中出现的概率。如果确切知道 $z$ 出现的次数,$P_z$ 就是 $z$ 的频率。

例如,若 $z$ 在 32 个符号中出现 8 次,即频率为 1/4,那么 $z$ 的熵为 $-lg(1/4) = 2$ 比特。这意味着用超过 2 比特来表示 $z$ 是多余的。通常一个符号用 8 比特(1 字节)表示,可见压缩在这种情况下有很大的提升空间。

下面通过一个包含 72 个实例、5 种不同符号的数据来计算熵,具体数据如下表:
| 符号 | 概率 | 每个实例的熵 | 总熵 |
| — | — | — | — |
| U | 12/72 | 2.584963 | 31.01955 |
| V | 18/72 | 2.000000 | 36.00000 |
| W | 7/72 | 3.362570 | 23.53799 |
| X | 15/72 | 2.263034 | 33.94552 |
| Y

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值