408【数据结构】哈夫曼树、哈夫曼编码与并查集知识点与部分错题

1.关于哈夫曼树

给定n个结点(每个都具有一定的权值),取权值最小的两个结点分别作为左孩子(权值假设为w1)和右孩子(权值假设为w2)进行合并,父结点权值为两个孩子的权值之和(权值为w1+w2),然后再从剩余的结点中(包括刚刚合并得到的父结点)找到权值最小的进行合并。这样进行了n-1次合并,每次都多出一个父结点,所以总的节点数为2n-1;将{10,12,16,21,30}五个结点构建哈夫曼树,构建过程如下图。

哈夫曼树的构成_哔哩哔哩_bilibili

哈夫曼树的构成

注:

1.每次两两配对都是当前权值最小的两个结点

2.也可能出现两个权值相同的结点,此时和任意一个配对都可。

3.例如,图中哈夫曼树生成过程中,10,12,16,21,30 中  10与12配对,父结点为22 下一次 就是22,16,21,30四个中相互配对。以此类推。

4.哈夫曼树可能并不唯一

2.哈夫曼编码

 

如图,若此时转向左孩子为0,转向右孩子为1,则权值为10的结点哈夫曼编码为:000,权值为12的结点哈夫曼编码为:001,以此类推。

3.带权路径长度(WPL)

带权路径长度WPL等于sum(结点的权值*(结点的深度-1))(设根节点深度为1)。

例如:

图中哈夫曼树的WPL=(10+12)*(4-1)+(16+21+30)*(3-1)=66+134=200

注意:

哈夫曼树的带权路径长度是相应结点生成的最小带权路径长度

4.并查集

并查集是用集合进行合并、查询操作的一种集合。

合并即两个集合合并为一个集合,查询即查询两个元素是否同属一个集合。

通常使用树(森林)的双亲表示作为并查集的存储结构。

元素位序(一般用数组存储)0123456789
元素值
父结点值-1-1-1-1-1-1-1-1-1-1

 父结点值为-1表示此时为初始化状态,元素值也为空。

进行合并时,集合均转化成树,然后找一个集合作为主树,其他集合均为该集合的右子树,依次类推。

5.错题

01.在有n个叶结点的哈夫曼树中,非叶结点的总数是()

A.n-1     B.n     C.2n-1     D.2n

分析:哈夫曼树只有叶子结点(度为0的结点)和度为2的结点,总的结点数为2n-1,所以非叶结点=度为2的结点数=(2n-1)-n=n-1

答案:A

05.一颗哈夫曼树共有215个结点,对其进行哈夫曼编码,共能得到()个不同的码字.

A.107     B.108     C.214     D.215

注:码字(Code Word)是指利用Huffman码编码后的信号。此处可以被认为是叶子结点。

分析:哈夫曼树共有215个结点,即2n-1个结点,对其进行哈夫曼编码,实际上进行编码的是原有的结点,而不是两个最小的结点合并产生的结点。因合并产生的结点,共有n-1个,所以能得到的不同码字个数是n(也就是叶子结点的个数)。2n-1=215->2n=216->n=108.

答案:B

07.如度为m的哈夫曼树中,叶子结点个数为n,则非叶节点的个数为().

A.n-1     B.⌊n/m⌋-1     C.⌈(n-1)/(m-1)⌉     D.⌈n/(m-1)⌉-1

分析:哈夫曼树只有叶子结点和度为2的结点。叶子结点的个数为n,总结点个数为2n-1,非叶结点个数为n-1.

答案:A

09.并查集中最核心的两个操作是:①查找,查找两个元素是否属于同一个集合;②合并,如果两个元素不属于同一个结合,且所在的两个集合腹部香蕉,则合并这两个集合。假设初始长度为10(0~9)的并查集,按照1-2、3-4、5-6、7-8、8-9、1-8、0-5、1-9的顺序进行查找和合并操作,最终并查集共有()个集合。

A.1     B.2     C.3     D.4

分析:初始时,0~9各成一个集合。进行查找时,查找1-2时,合并{1,2},查找3-4时,合并{3,4},查找5-6时,合并{5,6},查找7-8时,合并{7,8},查找8-9,合并{7,8,9},查找1-8时,合并{1,2,7,8,9},查找0-5时,合并{0,5,6},查找1-9时,他们同属一个集合。故有{1,2,7,8,9}、{0,5,6}、{3,4}三个集合。

答案:C

12.【2014统考真题】5个字符有如下4种编码方案,不是前缀码的是().

A.01,0000,0001,001,1

B.011,000,001,010,1

C.000,001,010,011,100

D.0,100,110,1110,1100

分析:哈夫曼编码的前缀码在解码的时候是不会产生歧义的,比如1110和11 10两个编码这三个编码是不可能同时存在的。依照这个原理,只有D选项是可能产生歧义的比如1100 和110  0这三个编码。

答案:D

13.【2015统考真题】下列选项给出的是从根分别到达两个叶结点路径上的权值序列,能属于同一棵哈夫曼树的是()。

A.24,10,5和24,10,7                      B.24,10,5和24,12,7

C.24,10,10和24,14,11                  D.24,10,5和24,14,6

分析:根结点24 由其中一个子结点为10可知 另一个子结点为14->选项A、B错误。若10的子节点为10 则另一个子结点为0  另一边子树14 若子结点为11 则另一子结点为3。由哈夫曼的构造过程可知(每次都是由两个最小的两个结点构造树),C选项给出的权值序列是不可能在同一子树的。而D选项 24(root) 10 5 5(left) 14 6 8(right)这样的构造是完全合理的。

答案:D

17.【2021统考真题】若某二叉树有5个叶结点,其权值分别为10,12,16,21,30,则其最小的带权路径长度(WPL)是()。

A.89     B.200     C.208     D.289

分析:如下图

哈夫曼树的构成_哔哩哔哩_bilibili

WPL=(4-1)*(10+12)+(3-1)*(30+16+21)=66+134=200

答案:B

18.【2022统考真题】给任意给定的含n(n>2)个字符的有限集S,用二叉树表示S的哈夫曼编码集和定长编码集,分别得到二叉树T1和T2,下列叙述中,正确的是()。

A.T1和T2的结点数相同

B.T1的高度大于T2的高度

C.出现频次不同的字符在T1中处于不同的层

D.出现频次不同的字符在T2中处于相同的层

分析:

定长编码顾名思义:比如n=4 那么结点就是 00 01 10 11

形成的树结点也就是4个

不妨假设n=3

如下图:

A选项:哈夫曼编码集5个结点 而定长编码集6个结点 A错误。

B选项:哈夫曼编码集和定长编码集高度相同,B错。

C选项:出现频次不同的字符可以出现在相同的层数,C错。

D选项:正确

答案:D

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
查集(Disjoint Set)是一种数据结构,用于解决集合的合并和查找问。在Python中可以使用类来实现并查集。引用展示了一个简单的并查集类的代码实现,其中包括了初始化集合、查找集合、合并集合和判断两个元素是否在同一个集合中的方法。另外,引用和展示了对并查集代码的优化,包括路径压缩和按秩合并等技巧,以提高并查集的效率。 在Python中使用并查集可以解决一些实际问,如求解岛屿个数、朋友圈等。通过将问转化为集合的合并和查找操作,可以使用并查集来高效地解决这些问。 所以,如果你需要在Python中实现并查集,可以参考以上的代码实现和优化方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python 数据结构与算法——并查集](https://blog.csdn.net/itnerd/article/details/103916115)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [并查集Python版](https://blog.csdn.net/XZ2585458279/article/details/127274576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2024考研加油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值