408数据结构-哈夫曼树 自学知识点整理

前置知识:二叉树的概念、性质与存储结构


哈夫曼树

哈夫曼树的定义

首先需要明确几个概念。
路径:从树中的一个结点到另一个结点之间的分支构成这两个结点之间的路径
路径长度:路径上的分支数目称为路径长度
(值):树中结点被赋予的表现或具有某种现实含义的值,这个值称为该结点的。(就是一般存放在 T − > d a t a T->data T>data里的那玩意)
结点的带权路径长度:从树的根到一个结点的路径长度(经过的边数)与该结点上权值的乘积,称为该结点的带权路径长度
例如,对下图中的树,结点 I I I的带权路径长度为 3 × 3 = 9 3×3=9 3×3=9
在这里插入图片描述
树的带权路径长度:树中所有叶结点的带权路径长度之和称为该树的带权路径长度,记为
W P L = ∑ i = 1 ∞ w i l i WPL=\sum\limits_{i=1}^{\infty }{{{w}_{i}}{{l}_{i}}} WPL=i=1wili
式中, w i w_i wi是第 i i i个叶结点所带的权值, l i l_i li是该叶结点到根结点的路径长度。对上图中的树,其带权路径长度为 3 × ( 5 + 1 + 10 + 3 ) = 57 3×(5+1+10+3)=57 3×(5+1+10+3)=57

哈夫曼树:在含有 n n n个带权叶结点的二叉树中,其中带权路径长度( W P L WPL WPL)最小的二叉树称为哈夫曼树,也称最优二叉树

哈夫曼树的构造

给定 n n n个权值分别为 w 1 , w 2 , ⋯ , w n {{w}_{1}},{{w}_{2}},\cdots ,{{w}_{n}} w1,w2,,wn的结点,构造哈夫曼树的算法描述如下:

  1. 将这 n n n个结点分别作为 n n n棵仅含一个结点的二叉树,构成森林 F F F
  2. 构造一个新结点,从 F F F中选取两棵根结点权值最小的树作为新结点的左、右子树,并且将新结点的权值置为左右子树上根结点的权值之和。
  3. F F F中删除刚才选出的两棵树,同时将新得到的树加入 F F F中。
  4. 重复步骤 2 2 2和步骤 3 3 3,直至 F F F中只剩下一棵树为止。

简而言之,就是把所有结点看成只有根节点的二叉树,然后每次从这一坨二叉树里选两个根结点权值最小的作为兄弟结点(无顺序),构成一棵新的二叉树,新二叉树的根结点权值为这两个结点权值的和。一直重复下去直到只剩最后一棵树,就是哈夫曼树,且不唯一。

哈夫曼树的性质

从构造过程中,可以看出哈夫曼树具有如下特点:

  1. 每个初始结点最终都将成为叶结点,且权值越小的结点到根结点的路径长度越大。
  2. 构造过程中共新建了 n − 1 n-1 n1个新结点(且均为双分支结点),因此哈夫曼树的结点总数为 2 n − 1 2n-1 2n1
  3. 每次构造都选择 2 2 2棵树作为新结点的孩子,因此哈夫曼树必是二叉树,且其中不存在度为 1 1 1的结点。

(图片来自王道考研408数据结构2025)
图片来自王道考研408数据结构2025

哈夫曼编码

在数据通信中,若对每个字符用相等长度的二进制位表示,则称这种编码方式为固定长度编码。若允许对不同字符用不等长的二进制位表示,则称这种编码方式为可变长度编码。可变长度编码要比固定长度编码好得多,其特点是对频率高的字符赋以短编码,而对频率较低的字符则赋以较长一些的编码,从而可以使字符的平均编码长度减短,起到压缩数据的效果。

若没有一个编码是另一个编码的前缀,则称这样的编码为前缀编码
由哈夫曼树得到哈夫曼编码,只需将字符中的每个字符作为一个结点,各个字符出现的频度(或次数)作为结点的权值,构造出对应的哈夫曼树。然后,从根到叶结点的路径上分支标记的字符串作为该字符的编码,这样就得到了哈夫曼编码。因为哈夫曼树是不唯一的,所以哈夫曼编码同样也不唯一。
哈夫曼编码常应用在数据压缩中。


在408考研初试中,常考对于一个给定的字符集,如何设计一个哈夫曼编码,其实就是构造一棵哈夫曼树。这一块知识对编写代码不作要求,只需掌握手推即可。
以上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/697025.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文精读】| KBS2023-TMBL-多模态情感分析系列文章解读

TMBL: Transformer-based multimodal binding learning model for multimodal sentiment analysis 一. KBS2023-TMBL-用于多模态情感分析的极向量和强度向量混合器模型1 Abstract1.1 Motivation1.2 Method1.3 Results 2. Related Work2.1 情感分析2.1 基于transformer的2.1 模态…

基于Echarts的大数据可视化模板:服务器运营监控

目录 引言背景介绍研究现状与相关工作服务器运营监控技术综述服务器运营监控概述监控指标与数据采集可视化界面设计与实现数据存储与查询优化Echarts与大数据可视化Echarts库以及其在大数据可视化领域的应用优势开发过程和所选设计方案模板如何满足管理的特定需求模板功能与特性…

基于Java的qq截图工具参考论文(论文 + 源码)

【免费】基于Java的qq截图工具.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89304179 基于Java的qq截图工具 摘要 当今时代是飞速发展的信息时代,人们在对信息的处理中对图像的处理量与日俱增,这一点在文档人员上显得非常突出。 本软…

将mongo查出的数据导出来,变成json,然后转Excel

在MongoDB shell或使用命令行工具(如mongo或mongosh)中,你可以将查询结果输出到JSON文件。以下是一个示例命令,它执行上述聚合查询并将结果写入名为output.json的文件: mongo your_database_name --quiet --eval db.u…

【qt】数值的输入与输出

数值的输入与输出 一.与c中的输入与输出的区别二.QString转数值三.数值转QString1.number()2.asprintf() 四.小项目1.总价和进制2.QSpinBox代替3.QSlider滑动块4.QScrollBar滚动条5.QDial表盘6.QLcdnumber lcd显示 五.总结一下下 一.与c中的输入与输出的区别 在c中我们一般通过…

【每日刷题】Day39

【每日刷题】Day39 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 622. 设计循环队列 - 力扣(LeetCode) 2. 387. 字符串中的第一个唯一字符 - …

实训七:实现用户管理功能

1.题目 实现用户管理功能。 2.目的 (1)理解Node.js程序的基本原理。 (2)掌握利用Node.js建立服务器程序的基本方法。 (3)理解Ajax的工作原理。 (4)掌握编写Ajax程序的基本方法。 (5)会利用所学知识设计简单的应用程序。 3.内容 设计程序能够对用户进行管理,实现查询…

出租车计价器设计与实现(论文 + 源码)

关于java出租车计价器设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89304164 出租车计价器设计与实现 摘 要 在我国,出租车行业是八十年代初兴起的一项新兴行业,随着出租车的产生,计价器也就应运而生。但当时在全…

【ARM Cortex-M 系列 2.1 -- Cortex-M7 Debug system registers】

请阅读【嵌入式开发学习必备专栏】 文章目录 Debug system registers中断控制状态寄存器(ICSR)Debug Halting Control and Status Register, DHCSR Debug 寄存器DCRSR与DCRDRCPU 寄存器读操作CPU 寄存器写操作CPU 寄存器选择CPU 寄存器读写示例 调试故障…

图片加载框架Glide

目录 一、Glide基础1.1 加载图片1.2 核心代码1.3 占位图1.4 指定图片格式1.5 指定图片大小 二、Glide缓存机制2.1 内存缓存2.2 硬盘缓存2.3 重写getCacheKey() 三、Glide的回调与监听3.1 回调源码追溯3.2 into3.3 preload()方法3.4 downloadOnly()方法3.5 listener()方法 四、图…

一个基于servlet的MVC项目-登录验证

一、MVC的概念 MVC是Model、View、Controller的缩写,分别代表 Web 应用程序中的3种职责1 模型:用于存储数据以及处理用户请求的业务逻辑。 2视图:向控制器提交数据,显示模型中的数据。 3控制器:根据视图提出的请求,判断将请求和数据交给哪个…

2024中国(重庆)航空航天暨无人机低空经济展览会

2024中国(重庆)航空航天暨无人机低空经济展览会 邀请函 组织机构 主办单位: 中国航空学会 重庆市南岸区人民政府 招商执行单位: 重庆港华展览有限公司 展会概括∶ 2024中国航空航天暨无人机低空经济展览会将于2024年8月23-25日在重庆…