哈夫曼树与哈夫曼编码
哈夫曼树:
哈夫曼树可由如下方式构造:
- 由给定的 $n$ 个权值构造 $n$ 棵仅含有一个根结点的二叉树,记作集合 $F$。
- 从集合 $F$ 中选取根结点权值最小的两棵二叉树 $T1$,$T2$ 作为左右子树构造新的二叉树 $T3$,新二叉树的根结点为 $T1$,$T2$ 根结点的权值和。
- 从集合 $F$ 中删除 $T1$,$T2$,将 $T3$ 加入 $F$ 中。
- 直到 $F$ 中只剩下唯一一棵二叉树为止,这棵树即为哈夫曼树。
建树:
| 字符 | 频率 | 编码 | 长度 |
|---|---|---|---|
| A | 35 | 11 | 2 |
| B | 25 | 00 | 2 |
| C | 15 | 01 | 2 |
| D | 15 | 101 | 3 |
| E | 10 | 100 | 3 |

哈夫曼编码:
哈夫曼编码根据字符在数据中出现的频率来分配不同长度的编码,频率高的字符分配较短的编码,频率低的字符分配较长的编码,从而实现压缩数据的目的,是一种贪心思想。
哈夫曼编码是一种前缀编码,即任一编码都不是其他任何一个编码的前缀。哈夫曼编码即为前缀编码中最短的。
带权路径长度(WPL)。
WPL 是每个编码的长度 $\times$ 频率。
| 字符 | 频率 | 编码 | 长度 | WPL(单个的) |
|---|---|---|---|---|
| A | 35 | 11 | 2 | 70 |
| B | 25 | 00 | 2 | 50 |
| C | 15 | 01 | 2 | 30 |
| D | 15 | 101 | 3 | 45 |
| E | 10 | 100 | 3 | 30 |
WPL(总共的)$=70+50+30+45+30=225$。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 heyZzz's OI Blog!