浅谈数据结构——赫夫曼数

出险原因

这里写图片描述

这篇博客就介绍一下最基本的压缩编码方法——赫夫曼编码

原理

赫夫曼编码的原理是赫夫曼树,这里我们先介绍赫夫曼树。

从数中一个节点到另一个节点之间的分支构成两个节点之间的路径,路径上的分支数目就是路径长度。

树的路径长度就是从树根节点到每一节点的路径长度之和。

例如:

这里写图片描述

二叉树a中根节点到节点D的路径长度为4.

二叉树的路径长度为:1+1+2+2+3+3+4+4=20.

节点的带权路径长度为从该节点到树根之间的路径长度与节点上权的乘积。

同理,树的带权路径长度为树中所有叶子节点的带全路径长度之和。

其中带权路径长度QPL最小的二叉树称为赫夫曼树(最优二叉树)。

二叉树a的WPL=5*1+15*2+40*3+30*4+10*4=315

构造哈夫曼树

  1. 先把有权值的叶子节点按照从小到大的顺序排列成一个有序序列:

这里写图片描述

  1. 取头两个最小权值的结点作为一个新节点N1的两个子节点,注意相对较小的是左孩子:

这里写图片描述

  1. 将15代替5和10,依旧按照从小到大的顺序排列:

这里写图片描述

  1. 重复步骤2,直到排列完成为止。

这里写图片描述

步骤总结:

  1. 根据节点的权值按从小到大排列节点的顺序。
  2. 合并两个最小的权值。
  3. 新合成的节点代替两个最小的权值进行按从小到大排列节点。
  4. 重复2-3直到排列完成。

赫夫曼编码

赫夫曼编码为了解决当年远距离通信的数据传输最优化问题。

比如传输队列为:

BADC-ADFE-ED

使用而二进制表示:

这里写图片描述

这样传输的真正编码为:

001-000-011-010-000-100-101-100-100-011

这里写图片描述

这里写图片描述

若要设置长度不等的编码,则必须保证任一字符的编码不是另一个字符的编码的前缀,这种编码称做前缀编码。

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

NobiGo

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

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

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

打赏作者

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

抵扣说明:

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

余额充值