计算哈夫曼树带权路径及求字母序列的哈弗曼编码

在准备软考的过程中遇到哈夫曼树题型,有些遗忘,顺便用这些例题恢复一下记忆。
1、哈夫曼树也称最优二叉树,在实际中有着广泛的应用。
叶子节点的权值
叶子结点的权值是对叶子结点赋予的一个有意义的数值量。
二叉树的带权路径长度
设二叉树具有N个带权值的叶子结点,从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和叫做二叉树的带权路径长度:WPL=w1l1+w2l2+…+wklk
其中wk为第K个叶子结点的权值;lk为从根节点到第k个叶子结点的路径长度。
如下图的二叉树,其带权路径长度为:WPL:2×2+4×2+5×2+3×2=28
《计算哈夫曼树带权路径及求字母序列的哈弗曼编码》

再举个栗子:
《计算哈夫曼树带权路径及求字母序列的哈弗曼编码》
该哈夫曼树的带权路径长度为:
WPL=2×2+5×2+3×2+4×3+5×3=37
哈夫曼算法的基本思想:
1.初始化: 根据给定的n个权值{w1,w2,…wn}构成n棵二叉树的集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权wi的根结点,左右子树均空。
2. 找最小树:在F中选择两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,且至新的二叉树的根结点的权值为其左右子树上根结点的权值之和。
3. 删除与加入:在F中删除这两棵树,并将新的二叉树加入F中。
4. 判断:重复前两步(2和3),直到F中只含有一棵树为止。该树即为哈夫曼树

这里举个栗子:
在这里新增的用正方形表示,原来的用圆形表示。
重复(2)(3)两步,当集合F中只剩下一棵二叉树时,这棵二叉树便是哈夫曼树,对于给定权值集合W={2,3,4,5},以下给出哈夫曼树的构造过程。
《计算哈夫曼树带权路径及求字母序列的哈弗曼编码》
(a)初始化

《计算哈夫曼树带权路径及求字母序列的哈弗曼编码》
(b)第一次合并

《计算哈夫曼树带权路径及求字母序列的哈弗曼编码》
(c)第二次合并
《计算哈夫曼树带权路径及求字母序列的哈弗曼编码》

在软考题中这道题考察的是哈弗曼编码
《计算哈夫曼树带权路径及求字母序列的哈弗曼编码》
字符在计算机中是用二进制表示的,每个字符用不同的二进制来表示,码的长度影响存储空间和传输效率。若是定长编码方法,用2位码长,只能表示4个字符,即00,01,10,11;若用3位码长,则可以表示8个字符,即000,001,010,011,100,101,110,111。对于题中给出的列子,一共有6个字符,因此采用码长的编码可以表示这些字符。(假设编码长度为N 2^N>=6 N=3
题中给出字符频率,先选择频率最小的字符组合,根据上述方法,画出哈夫曼树
《计算哈夫曼树带权路径及求字母序列的哈弗曼编码》
A、1100 0 100 1101
B、0011 1 011 0011
C、1010 0 001 0100
D、0101 1 110 1011
可以首先分出每个字符的编码长度
f的长度是5
a的长度是1
c的长度是3
e的长度是4
做题时自己的编码方式可能和出题人的编码方式有所不同所以此时需要一些技巧,需要用排除法来做,f和e的区别是最后一个编码不一样,此时排除BCD。

    原文作者:哈夫曼树
    原文地址: https://blog.csdn.net/littlecase233/article/details/83046768
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞