哈夫曼树以及哈夫曼编码
哈夫曼树以及哈夫曼编码
一、哈夫曼树
1. 哈夫曼树的定义
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree),哈夫曼树是带权路径长度最短的树。权值较大的结点离根较近。
说明:哈夫曼树是一种用于哈夫曼编码的工具结构。
2. 哈夫曼树的构造过程
哈夫曼树的构造目标是:使带权路径长度(WPL)最小(贪心策略)
即:WPL = ∑(叶子节点权值×路径长度)
构造原则:每次选取当前权值最小的两个节点进行合并,直到只剩一棵树(贪心策略)。
3. 哈夫曼树的特点
1)初始节点都在树的叶子节点上
2)权值大的节点离根更近
3)每个非叶子节点都有两个孩子(因为我们自下向上构造,两个孩子构成一个新树的根节点)
4. 举例:假设有一组权值 5,29,7,8,14,23,3,11,请尝试构造哈夫曼树。

计算权值:5*5+3*5+7*4+14*3+29*2+8*3+11*3+23*2 = 271
注意:哈夫曼树不一定唯一。当构造过程中出现相同权值的节点时,可以有多种合法的合并顺序,因此可能得到不同的哈夫曼树和哈夫曼编码。但无论构造方式如何,其带权路径长度(WPL)都是最小且相同的。
二、哈夫曼编码
1. 哈夫曼编码的定义
哈夫曼编码是一种变长前缀编码(Prefix Code),具有无歧义特性;其编码长度与字符频率相关(高频短、低频长),并且在所有前缀编码中具有最优的平均编码长度,是一种高效的无损压缩编码方式。
2. 编码规则
在哈夫曼树中:左分支记为 0,右分支记为 1,从根到叶子的路径即为该字符编码。
3. 举例:设有5个字符,根据其使用频率为其构造哈夫曼编码。以下编码方案中,选项 ( ) 是不可能的。
A. {111,110,101,100,0}
B. {0000,0001,001,01,1}
C. {11,10,01,001,000}
D. {11,10,011,010,000}
选项:D (000 这个编码上,有一个内部节点只有1个孩子节点,这个就不满足哈夫曼编码)

浙公网安备 33010602011771号