哈夫曼树的建立、编码以及WPL值的计算

假设用于通信的电文由字符集{A,B,C,D,E,F}中的字母构成,这些字母在电文中出现的概率分别为{0.10,0.19,0.20,0.35,0.12,0.04},要求:
1、构造一棵Huffman树,填写下表,要求左结点的权不大于右结点的权
2、在下表中填入各字符的Huffman编码(左分支为”0”,右分支为”1”)
3、求带权路径长度
解析:
1、哈夫曼树的构造
将电文概率由大到小依次排序
0.04,0.10,0.12,0.19,0.20,0.35
将0.04和0.10作为左子树,右子树构成一棵树。
则如图所示:
这里写图片描述
它们根节点之和作为新的结点,删掉刚才两个结点,加入新结点0.14重新由大到小排序
0.12,0.14,0.19,0.20,0.35
将最小的两个结点作为左子树、右子树构成新的树。
如图所示:
这里写图片描述
删掉刚才两个结点,加入新结点0.26,重新排序
0.19,0.20,0.26,0.35
将此时最小的两个结点作为左右子树,建立新的树
如图所示:
这里写图片描述
删掉刚才两个结点,加入新结点0.39,重新排序
0.26,0.35,0.39
将此时最小的两个结点作为左右子树,建立新的树
如图所示:
这里写图片描述
至此只剩下两个结点,构成满足条件的树,如图:
这里写图片描述
2,哈夫曼编码
(菜鸟的自我理解,有错误还希望大家指正)
如图所示:
这里写图片描述
这里附加一个数据结构与算法课本案例

这里写图片描述
3,WPL值的计算
首先给出路径和路径长度的概念,从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上的分支数目称作路径长度。树的路径长度是从树根到每一结点的路径长度之和。
树的带权路径长度为树中所有叶子结点的带权路径长度之和,通常记作WPL.

带权路径长度 = (0.19 +0. 20 + 0.35) * 2 + 0.12 * 3 + (0.04 + 0.10) * 4 = 2.4

哈夫曼树的带权路径长度(WPL)是指所有叶子节点的带权路径长度之和。构造哈夫曼树的算法如下: 1. 首先,根据给定的字符集和它们在电文中出现的概率,将每个字符看作一个节点,并将节点的权设置为对应概率。 2. 将这些节点按照权从小到大排序,并将它们依次放入一个优先队列(或最小堆)中。 3. 从优先队列中选择权最小的两个节点,将它们作为左右子节点创建一个新的节点,新节点的权为两个子节点的权之和。 4. 将新节点插入优先队列中,重复步骤3,直到优先队列中只剩下一个节点,即哈夫曼树的根节点。 5. 根据哈夫曼树构造过程,可以得到每个字符的Huffman编码。从根节点出发,向左走表示编码为0,向右走表示编码为1,直到叶子节点。 6. 将每个字符的Huffman编码填入对应的表格中。 7. 最后,计算带权路径长度,即将每个叶子节点的权乘以对应的编码长度,并将它们相加即可得到WPL。 以上就是构造哈夫曼树计算WPL的算法。 [3<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [哈夫曼树及求其WPL的算法](https://blog.csdn.net/Wizzy_Ang/article/details/125548685)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [哈夫曼树建立与二叉树WPL算法以及相关例题](https://blog.csdn.net/weixin_51578598/article/details/120935284)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值