给定一组数列(10,18,16,25,6,9,16)分别代表字符A,B,C,D,E,F,G出现的频率 1. 画出对应的哈夫曼树(要求左孩子权值尽可能小,哈夫曼树的高度尽可能小) 2. 给出个字符的哈夫曼编码
时间: 2023-10-02 15:04:41 浏览: 137
1. 哈夫曼树的构造过程如下:
首先将所有节点按照权值从小到大排序,得到节点顺序为E、F、G、A、C、B、D。
然后选取权值最小的两个节点E和F,构造新节点EF,权值为10+9=19,将E和F分别作为EF的左右子节点。
得到节点顺序为G、A、C、B、D、EF。
再次选取权值最小的两个节点G和A,构造新节点GA,权值为16+16=32,将G和A分别作为GA的左右子节点。
得到节点顺序为GA、C、B、D、EF。
继续选取权值最小的两个节点GA和C,构造新节点GAC,权值为32+16=48,将GA和C分别作为GAC的左右子节点。
得到节点顺序为B、D、EF、GAC。
继续选取权值最小的两个节点B和D,构造新节点BD,权值为6+16=22,将B和D分别作为BD的左右子节点。
得到节点顺序为EF、GAC、BD。
最后选取权值最小的两个节点EF和GAC,构造新节点EFGAC,权值为19+48=67,将EF和GAC分别作为EFGAC的左右子节点,构造出哈夫曼树。
哈夫曼树如下图所示:
```
EFGAC
/ \
EF(19) GAC(48)
/ \ / \
E(10) F(9) GA(32) C(16)
/ \
G(16) A(16)
/ \
B(6) D(16)
```
2. 根据哈夫曼树,可以得到每个字符的哈夫曼编码如下:
A:01
B:000
C:11
D:001
E:10
F:110
G:111
因此,字符A的哈夫曼编码为01,字符B的哈夫曼编码为000,字符C的哈夫曼编码为11,字符D的哈夫曼编码为001,字符E的哈夫曼编码为10,字符F的哈夫曼编码为110,字符G的哈夫曼编码为111。
阅读全文