数据结构——哈夫曼树

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

目录

用什么方法构建堆?

堆的特点

哈夫曼树 · 前言

哈夫曼树的构成

哈夫曼编码

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


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


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


用什么方法构建堆?

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

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

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

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


每个方法都有优有缺。


堆的特点

1. 结构性

2. 有序性

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


最大堆:又称“大顶堆”

最小堆:又称“小顶堆”


哈夫曼树 · 前言

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

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


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


哈夫曼树的构成

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


如何构建哈夫曼树


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

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

哈夫曼编码

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


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

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



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


相关文章
|
存储 算法 C语言
C语言---数据结构实验---哈夫曼树及哈夫曼编码的算法实现---图的基本操作
C语言---数据结构实验---哈夫曼树及哈夫曼编码的算法实现---图的基本操作
|
3月前
|
存储 C语言
数据结构基础详解(C语言): 树与二叉树的应用_哈夫曼树与哈夫曼曼编码_并查集_二叉排序树_平衡二叉树
本文详细介绍了树与二叉树的应用,涵盖哈夫曼树与哈夫曼编码、并查集以及二叉排序树等内容。首先讲解了哈夫曼树的构造方法及其在数据压缩中的应用;接着介绍了并查集的基本概念、存储结构及优化方法;随后探讨了二叉排序树的定义、查找、插入和删除操作;最后阐述了平衡二叉树的概念及其在保证树平衡状态下的插入和删除操作。通过本文,读者可以全面了解树与二叉树在实际问题中的应用技巧和优化策略。
|
6月前
|
机器学习/深度学习 存储
数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)
数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)
190 1
|
7月前
|
编译器
【数据结构】哈夫曼树编译码器【课程设计】
【数据结构】哈夫曼树编译码器【课程设计】
|
存储 算法
数据结构实验十二 哈夫曼树及编码
数据结构实验十二 哈夫曼树及编码
99 0
|
7月前
|
算法 Java
数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!
数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!
3282 0
|
C语言
c语言数据结构-哈夫曼树
c语言数据结构-哈夫曼树
110 0
|
存储 算法
【开卷数据结构 】哈夫曼树
【开卷数据结构 】哈夫曼树
120 0
|
算法
大话数据结构--哈夫曼树及其应用
大话数据结构--哈夫曼树及其应用
131 0
|
C语言
C语言《数据结构》——哈夫曼树
C语言《数据结构》——哈夫曼树
386 0