给定权值集合W={a:5, b:29, c:7, d:8, e:14, f23,g:3,h:11}试构造一棵关于W的哈夫曼树,并求其加权路径长度WPL,给出每一个字符的哈夫曼编号令左分支为0,右分支为1
时间: 2023-05-25 11:06:35 浏览: 138
根据给定的n个权值构造哈夫曼树。通过遍历此二叉树完成哈夫曼编码。
4星 · 用户满意度95%
构造哈夫曼树的过程如下:
1. 将W中的所有字符排序,得到c,g,d,a,e,h,f,b;
2. 取出W中权值最小的两个字符c和g,构造出一个新节点并将它们作为新节点的左右子节点,将新节点加入到W中;
3. 重复步骤2,直到只剩下一个节点,即为根节点,构造完成。
构造出的哈夫曼树如下:
```
97
/ \
50(c) 47
/ \
24(g) 23
/ \
11(h) 12
/ / \
5(a) 6(d) 6(e)
\
3(b)
\
23(f)
```
根据哈夫曼树的定义,将所有字符求出它们在哈夫曼树中的路径,路径上每条边的权值即为该边两端节点的权值之和,最后将所有字符的路径长度加起来,得到WPL:
WPL = 5*2 + 29*2 + 7*3 + 8*3 + 14*3 + 23*2 + 3*4 + 11*3
WPL = 214
根据哈夫曼树,每个字符的编码是其在哈夫曼树上由根向该字符的路径上经过的边的方向所对应的二进制数。从根开始遍历哈夫曼树,每遇到一个左子节点记录一个0,每遇到一个右子节点记录一个1,直到到达目标字符所在的叶子节点为止。
根据上图,可以得到每个字符的哈夫曼编码:
a: 110
b: 11101
c: 00
d: 11100
e: 100
f: 01
g: 01
h: 101
所以,哈夫曼树的加权路径长度为214,每个字符的哈夫曼编码分别为110、11101、00、11100、100、01、01和101。
阅读全文