有数据WG={7,19,2,6,32,3,21,10}, (1)画出所构建的Huffman 树; (2)所建Huffman 树的树高是多少? (3)求所建Huffman 树的带权路径长度WPL。
时间: 2023-09-17 13:06:04 浏览: 123
### 回答1:
好的,首先是你的问题:
1. (1) 可以根据Huffman编码的规则构建Huffman树,首先是将数据排序,从小到大:{2,3,6,7,10,19,21,32},然后将权值最小的两个节点合并为一个父节点,权值为它们的和。重复这个过程,直到所有的节点都被合并,构成Huffman树如下图所示:
```
[100]
/ \
[48] [52]
/ \ / \
[22] [26] [24] [28]
/ \ / \ / \ / \
[10] [12][14] [12][9] [10][14] [14]
/ \
[3] [7]
```
2. (2) 所建Huffman树的树高为4。
3. (3) 求WPL,可以根据每个叶子节点的权值和该叶子节点到根节点的距离来计算WPL。在这个Huffman树中,叶子节点有8个,权值分别为7,19,2,6,32,3,21,10。对于每个叶子节点,可以计算出它所代表的字符的编码为多少位,如下表所示:
| 字符 | 权值 | 编码位数 |
|------|------|---------|
| 7 | 7 | 3 |
| 19 | 19 | 3 |
| 2 | 2 | 6 |
| 6 | 6 | 4 |
| 32 | 32 | 2 |
| 3 | 3 | 6 |
| 21 | 21 | 4 |
| 10 | 10 | 4 |
可以发现,每个字符的编码位数乘以其权值就得到了它对WPL的贡献。例如,字符7的编码位数为3,在树中的距离为3,所以它对WPL的贡献为7*3=21。所有叶子节点的贡献相加即可得到WPL。计算公式如下:
WPL = 7*3 + 19*3 + 2*6 + 6*4 + 32*2 + 3*6 + 21*4 + 10*4 = 235
所以所建Huffman树的带权路径长度为235。
### 回答2:
(1)根据给定的数据WG={7,19,2,6,32,3,21,10},构建Huffman树的过程如下:
步骤1:将所有的数据看作是独立的树节点,并根据节点的权重值进行排序,得到{2,3,6,7,10,19,21,32}。
步骤2:取出权重值最小的两个节点,构建一个新的二叉树,合并这两个节点的权重值,得到一个新的节点的权重值。例如,取出2和3,合并为一个权重值为5的新节点。
步骤3:将新生成的节点插入到排序好的列表中,并保持排序。
步骤4:重复步骤2和步骤3,直到只剩下一个节点,该节点就是构建的Huffman树的根节点。
最终得到的Huffman树如下所示:
103
/ \
35 68
/ \ / \
15 20 8 28
/ \ / \ / \
7 8 3 12 7 13 15
(2)所建Huffman树的树高是3层。
(3)求所建Huffman树的带权路径长度WPL的方法是:将每个叶子节点的权重乘以到根节点的路径长度(也就是从根节点到叶子节点的边的数量),然后将所有叶子节点的路径长度相加。
根据上面的Huffman树,计算WPL的过程如下:
7 * 3 + 8 * 3 + 3 * 4 + 12 * 4 + 7 * 3 + 13 * 3 + 15 * 3 = 21 + 24 + 12 + 48 + 21 + 39 + 45 = 210
所建Huffman树的带权路径长度WPL为210。
### 回答3:
(1)根据给定数据WG={7,19,2,6,32,3,21,10},首先按照权值从小到大的顺序排列,得到{2,3,6,7,10,19,21,32}。
然后,将每个数字看作是一个独立的树节点,并给予对应的权值。
接着,将权值最小的两个节点合并为一个节点,合并后的节点的权值为两个被合并节点的权值之和。
重复上述步骤,每次合并两个权值最小的节点,直到只剩下一个节点为止。
最终得到的树即为所构建的Huffman树。
Huffman树如下图所示:
100
/ \
/ \
46 54
/ \ / \
25 21 32 22
/ \
10 15
/ \
2 3
(2)所建Huffman树的树高是3,即从根节点到最远的叶子节点的路径长度为3。
(3)所建Huffman树的带权路径长度WPL可以通过计算每个叶子节点的深度与对应的权值的乘积,并将所有叶子节点的带权路径长度相加得到。
计算过程如下:
叶子节点2的深度为3,带权路径长度为2*3=6;
叶子节点3的深度为3,带权路径长度为3*3=9;
叶子节点6的深度为2,带权路径长度为6*2=12;
叶子节点7的深度为2,带权路径长度为7*2=14;
叶子节点10的深度为2,带权路径长度为10*2=20;
叶子节点19的深度为1,带权路径长度为19*1=19;
叶子节点21的深度为1,带权路径长度为21*1=21;
叶子节点32的深度为1,带权路径长度为32*1=32。
最终,带权路径长度WPL为6+9+12+14+20+19+21+32=133.
阅读全文