数据结构——哈夫曼树

简介: 哈夫曼树 · 前言哈夫曼树又叫做最优二叉树,可以将其看作一种特殊的二叉树。可以说是从堆引入的哈夫曼树;堆的作用是构造最大堆和最小堆实现挑选最值删除的东西,而哈夫曼树也是寻找max和min并对其进行操作。哈夫曼树的原理:出现频率较高的数占空间小,出现频率较低的数占空间更大。从而实现不压缩数据且节省空间的一种存储方式。

目录

用什么方法构建堆?

堆的特点

哈夫曼树 · 前言

哈夫曼树的构成

哈夫曼编码

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


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


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


用什么方法构建堆?

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

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

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

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


每个方法都有优有缺。


堆的特点

1. 结构性

2. 有序性

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


最大堆:又称“大顶堆”

最小堆:又称“小顶堆”


哈夫曼树 · 前言

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

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


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


哈夫曼树的构成

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


如何构建哈夫曼树


在数据中挑选两个出现频率最低的数进行合并,直到合并完所有元素。

注意:我们需要的字符必须都放在叶结点上。

哈夫曼编码

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


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

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



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


相关文章
|
8月前
|
存储 算法 C语言
C语言---数据结构实验---哈夫曼树及哈夫曼编码的算法实现---图的基本操作
C语言---数据结构实验---哈夫曼树及哈夫曼编码的算法实现---图的基本操作
|
19天前
|
机器学习/深度学习 存储
数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)
数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)
16 1
|
1月前
|
编译器
【数据结构】哈夫曼树编译码器【课程设计】
【数据结构】哈夫曼树编译码器【课程设计】
|
11月前
|
存储 算法
数据结构实验十二 哈夫曼树及编码
数据结构实验十二 哈夫曼树及编码
56 0
|
1月前
|
算法 Java
数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!
数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!
969 0
|
11月前
|
C语言
c语言数据结构-哈夫曼树
c语言数据结构-哈夫曼树
|
11月前
|
存储 算法
【开卷数据结构 】哈夫曼树
【开卷数据结构 】哈夫曼树
98 0
|
算法
大话数据结构--哈夫曼树及其应用
大话数据结构--哈夫曼树及其应用
102 0
|
C语言
C语言《数据结构》——哈夫曼树
C语言《数据结构》——哈夫曼树
352 0
|
算法 C语言
数据结构与算法(十四)哈夫曼树
数据结构与算法(十四)哈夫曼树
121 0