1.关于哈夫曼树
给定n个结点(每个都具有一定的权值),取权值最小的两个结点分别作为左孩子(权值假设为w1)和右孩子(权值假设为w2)进行合并,父结点权值为两个孩子的权值之和(权值为w1+w2),然后再从剩余的结点中(包括刚刚合并得到的父结点)找到权值最小的进行合并。这样进行了n-1次合并,每次都多出一个父结点,所以总的节点数为2n-1;将{10,12,16,21,30}五个结点构建哈夫曼树,构建过程如下图。
哈夫曼树的构成
注:
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.并查集
并查集是用集合进行合并、查询操作的一种集合。
合并即两个集合合并为一个集合,查询即查询两个元素是否同属一个集合。
通常使用树(森林)的双亲表示作为并查集的存储结构。
元素位序(一般用数组存储) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
元素值 | ||||||||||
父结点值 | -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
分析:如下图
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