哈夫曼树与哈夫曼编码

文章中部分内容和思路来自《大话数据结构》

准备知识

路径长度:从树中一个节点到另一个节点之间的分支构成两个节点之间的路径,路径上的分支数目称作路径长度。例如图6-12-4(a)中从根节点到D节点的路径长度为4

树的路径长度:从根节点到每个节点的路径长度之和。例如图6-12-4(a)中树的路径长度为1+1+2+2+3+3+4+4=20

带权路径长度:从树中一个节点到根节点之间的路径长度与节点上权的乘积

树的带权路径长度:树的带权路径长度为树中每个节点的带权路径长度之和

哈弗曼树定义

带权路径长度WPL最小的二叉树叫做哈弗曼树,也叫最优二叉树

哈弗曼树的构造

以带权节点A5、B15、C40、D30、E10为例

Step1:在给出的带权节点中取出最小两个权值的节点,构造成如图6-12-5的树

Step2:在剩下的带权节点中取出最小权值的节点,构造成如图6-12-6的树

Step3:重复Step2,依次构造6-12-7、6-12-8,完成构造

哈夫曼编码定义

一般地,设需要编码的字符集为{d1, d2, d3 ... dn},各个字符在电文中出现的次数或频率集合为{w1, w2, w3 ... wn},以d1, d2, d3 ... dn作为相应的叶子节点,以w1, w2, w3 ... wn作为相应叶子节点的权值来构造一棵哈弗曼树。规定哈弗曼树的左分支代表0,右分支代表1,则从根节点到叶子节点所经过的路径分支组成的0和1的序列便为该节点对应字符的编码,这就是哈夫曼编码

哈夫曼编码案例

将"BADCADFEED"内容以二进制方式传输,假设各字符使用频率分别为A 27, B 8, C 15, D15, E 30, F 5

采用传统二进制编码方式:

编码结构为001000011010000011101100100011(30个字符)

采用哈夫曼编码方式:

编码结构为1001010010101001000111100(25个字符)[ps:编解码需要遵循相同的哈夫曼树]

代码实现见后续文章《哈夫曼编码c++/qt实现》:http://blog.csdn.net/superyang_/article/details/79281404

 ====================================================================

博主有自己的个人主页啦!请求关注,请求支持。QAQ.

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SuperYang_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值