0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# 构造霍夫曼树的过程

​(1)根据给定的n个权值{w1, w2, …,wn}, 构成n棵二叉树的集合F= {T1, T2, …Tn},其中,每棵树Ti中只有一个带权为wi的根结点,其左、右子树均空。​

​(2)在F中选取两棵权值最小的树作为左、右子树构造一棵新的二叉树,新构造二叉树的根结点的权值为其左、右子树根结点的权值之和。​

​(3)从F中删除这两棵树,同时将新得到的二叉树加入到F中。​

​(4)重复(2)、(3)步,直到F中只含一棵树时为止,这棵树便是霍夫曼树(哈夫曼树)。


【2019年第45-46题】己知某文档仅包含6种不同的字符,其每个字符出现的频率如下表所示,采用霍夫曼编码对该文档压缩存储,则单词“face”的编码为(1),该文档的压缩比为(2)。

#yyds干货盘点# 构造霍夫曼树的过程_二叉树


(1)

A、110001001101           

B、101000010100               

C、001101001100              

D、110101001100

(2)

A、20%           

B、25%               

C、30%              

D、40%

解析:本题考查程序设计语言中二叉树数据结构的基础知识。

按照上面知识点所讲的构造方法:

(1)先找到权值最小的节点f、e,构造成一个权值为14的新节点,放到原来的表中,删除f、e这两个用过的节点。

(2)然后继续寻找剩下节点中权值最小的两个,发现是c和b,继续构造成权值为25的新节点,放到原来的表中,删除c、b这两个用过的节点。

(3)然后继续寻找剩下节点中权值最小的两个,发现是14和d,继续构造成权值为30的新节点,放到原来的表中,删除14、d这两个用过的节点。

(4)然后继续寻找剩下节点中权值最小的两个,发现是25和30,继续构造成权值为55的新节点,放到原来的表中,删除25、30这两个用过的节点。

(5)然后继续寻找剩下节点中权值最小的两个,发现就剩下了a和55,继续构造成权值为100的新节点至此构造完毕。构造霍夫曼树如下图所示:

#yyds干货盘点# 构造霍夫曼树的过程_权值_02

由图可得各个字符的编码如下:

a:0;

b:101;

c:100;

d:111;

e:1101 ;

f:1100;

所以face的编码为:1100 0100 1101。

压缩前,属于等长编码,每个字符用3位编码足够表示,因为2位二进制只能表示2的2次方,也就是4个字符,3位二进制能表示8个字符,所以浪费了,所以采用霍夫曼编码可以压缩编码长度。压缩后编码长度为:1*45%+3*13%+3*12%+3*16%+4*9%+4*5%=2.24;

压缩率为:(3-2.24)/3≈25%;

故正确答案为:(1)A   (2)B

举报

相关推荐

0 条评论