解决关于哈夫曼编码计算带权路径长度问题

本文介绍了哈夫曼树的概念,即最优二叉树,它具有带权路径长度最短的特性。文章通过举例展示了构建哈夫曼树的过程,并详细解释了如何利用优先队列来处理权重问题。对于给定输入字符串,文章分析了统计字母出现次数、编码计数以及计算带权路径长度的方法,最后讨论了在不构建完整哈夫曼树的情况下,如何求解带权路径长度。
摘要由CSDN通过智能技术生成

这是在做一道编程提示遇到的,学习了一位博主的编码,其中有些问题未能理解,分析解决掉。
首先什么是哈夫曼树:
哈夫曼树,又称最优二叉树,是一类带权路径长度最短的树。
也就是根节点到节点的中的长度最小,当然条件就是,每条路径都是有权重的,
所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL= (W1*L1+W2*L2+W3*L3+…+Wn*Ln)
这里写图片描述

此时WPL=32×1+24×2+2×3+7×3

一般建立哈夫曼树的步骤为
1,将所有左,右子树都为空的作为根节点。
2,在森林中选出两棵根节点的权值最小的树作为一棵新树的左,右子树,且置新树的附加根节点的权值为其左,右子树上根节点的权值之和。注意,左子树的权值应小于右子树的权值。
3,从森林中删除这两棵树,同时把新树加入到森林中。
4,重复2,3步骤,直到森林中只有一棵树为止,此树便是哈夫曼树。
太原理工网站给出了动画演示
http://www.tyut.edu.cn/kecheng1/site01/suanfayanshi/Huffman.asp

上面提到的根据权重排序,选出权重最小的两个,这个功能在优先队列中完全可以做到。所以在构建哈夫曼树时可以利用优先队列

然后看看题目吧

Input
The input file will contain a list of text strings, one per line. The text strings will consist only of uppercase alphanumeric characters and underscores (which are used in place of spaces). The end of the input will be signalled by a line containing only the word “END” as
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值