哈夫曼编码和带权路径计算

哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。下面用一幅图来说明。

它们的带权路径长度分别为:

图a: WPL=5*2+7*2+2*2+13*2=54

图b: WPL=5*3+2*3+7*2+13*1=48

可见,图b的带权路径长度较小,我们可以证明图b就是哈夫曼树(也称为最优二叉树)。

哈夫曼树构建教程

例:对于给定的一组权值w={1,4,9,16,25,36,49,64,81,100},构造具有最小带权外部路径长度的扩充二叉树,并求出他的的带权外部路径长度。

解:1、首先我们对这一组数字进行排序。规则是从小到大排列(题目已排序好)。

      2、在这些数中 选择两个最小的数字(哈夫曼树是从下往上排列的)写在纸上。如下图所示

  3、用一个类似于树杈的“树枝”连接上两个最小的数。在顶点处计算出这两个数字的和 并写在上面。然后再比较剩下的数字和这个和的大小,再取出两个最小的数字进行排列

4、如上图中30,25的和为55,已经大于36,49.所以这个时候开始有分支,用36,49再构造一个分支,如下图。

5、最后将分支合并成一个二叉树,如下图

6、这样,二叉树结构就构建好了。

 

带权外部路径长度计算;

WPL=2*100 + 3*64 + 2*81 + 4*25 + 2*49 + 2*36 + 5*16 + 6*9 + 7*1 + 7*4 =993

(385的权重为0,216和166权重为1.....)

左0右1:哈夫曼编码为:

好的,我来回答你的问题。 求解Huffman编码问题的过程可以分为以下几步: 1. 统计每个字符出现的频率,将它们作为值构建出一个森林。 2. 从森林中选择两棵最小的树作为左右子树构建一棵新的树,其值为左右子树的值之和。 3. 将新构建的树加入到森林中,重复步骤2直到森林只剩下一棵树为止。 4. 对于每个字符,从根节点开始遍历构建出它的哈夫曼编码,其中左子树标记为0,右子树标记为1。 5. 计算每个字符的带权路径值,即每个字符的值与它的哈夫曼编码长度的乘积之和。 下面是使用贪心算法求解Huffman编码问题的示例: 假设有5个字符A、B、C、D、E,它们的值分别为5、2、4、7、1。 1. 首先将每个字符的值作为一个森林中的单独树。 ``` A(5) B(2) C(4) D(7) E(1) ``` 2. 选择最小的两棵树B和E作为左右子树构建一棵新的树,其值为B和E的值之和3,得到以下森林: ``` A(5) C(4) D(7) BE(3) / \ B(2) E(1) ``` 3. 选择最小的两棵树A和C作为左右子树构建一棵新的树,其值为A和C的值之和9,得到以下森林: ``` D(7) BE(3) AC(9) / \ / \ B(2) E(1) A(5) C(4) ``` 4. 选择最小的两棵树BE和C作为左右子树构建一棵新的树,其值为BE和C的值之和7,得到以下森林: ``` D(7) AC(9) BEC(7) / | \ A(5) B(2) C(4) E(1) ``` 5. 选择最小的两棵树D和BEC作为左右子树构建一棵新的树,其值为D和BEC的值之和14,得到以下森林: ``` DBEC(14) AC(9) / \ D(7) BEC(7) / \ B(2) C(4) E(1) ``` 6. 选择最小的两棵树AC和DBEC作为左右子树构建一棵新的树,其值为AC和DBEC的值之和23,得到以下森林: ``` Huffman Tree: H(23) / \ AC(9) DBEC(14) / / \ A(5) D(7) BEC(7) / \ / \ B(2) C(4) E(1) ``` 7. 对于每个字符,从根节点开始遍历构建出它的哈夫曼编码: ``` A: 0 B: 111 C: 10 D: 110 E: 1100 ``` 8. 计算每个字符的带权路径值: ``` A: 5*1 = 5 B: 2*3 = 6 C: 4*2 = 8 D: 7*2 = 14 E: 1*4 = 4 ``` 因此,构造的哈夫曼树为23,哈夫曼编码为A: 0, B: 111, C: 10, D: 110, E: 1100带权路径值为A: 5, B: 6, C: 8, D: 14, E: 4。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chde2Wang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值