数据结构——哈夫曼树

目录

用什么方法构建堆?

堆的特点

哈夫曼树 · 前言

哈夫曼树的构成

哈夫曼编码


要讲哈夫曼树,我们从堆进行引入。

用于满足一种新的需求:计算机有时候需要优先处理某些任务。在这了抽象成挑选最大/最小值进行操作。

仍然是采用链表或者数组实现有限队列。

用什么方法构建堆?

1. 数组(结构简单,麻烦在于删除某个目标后,后面所有元素位置需要往前挪一位)

2. 链表(结构相对复杂,也是需要遍历寻找目标,删除比较方便吧)

3. 有序数组(插进去的时候就找好位置再插,这样能直接找到最值进行操作。但是难点在于插入位置不好找。)

4. 有序链表(结构更复杂了,插入元素比较复杂,删除方便)

每个方法都有优有缺。

堆的特点

1. 结构性

2. 有序性

任何一个节点的关键字是其子树所有结点的最大值(或者最小值)。

最大堆:又称“大顶堆”

最小堆:又称“小顶堆”

哈夫曼树 · 前言

哈夫曼树又叫做最优二叉树,可以将其看作一种特殊的二叉树。

可以说是从堆引入的哈夫曼树;堆的作用是构造最大堆和最小堆实现挑选最值删除的东西,而哈夫曼树也是寻找max和min并对其进行操作。

哈夫曼树的原理:出现频率较高的数占空间小,出现频率较低的数占空间更大。从而实现不压缩数据且节省空间的一种存储方式。

哈夫曼树的构成

堆的构造是在所有数字中挑选两个最大/最小的数字合并,再继续挑选继续合并。而哈夫曼树是在数据中挑选两个出现频率最低的数进行合并。

如何构建哈夫曼树

  1. 在数据中挑选两个出现频率最低的数进行合并,直到合并完所有元素。
  2. 注意:我们需要的字符必须都放在叶结点上。

哈夫曼编码

使用哈夫曼树进行编码,需要注意👇

字符只在叶结点上。(作用是避免二义性。保证每一个参数都没有后缀只有前缀(路径上的数就代表前/后缀)

为了方便理解,我在这里放上一张图片👇

 图虫中左支全部为0,右支全部为1。如此一来,路径所组成的数就是该字符对应的编码。

就酱,拜拜~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

若东

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

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

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

打赏作者

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

抵扣说明:

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

余额充值