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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实时追踪维修进度,报修管理小程序让你省心又省力!

随着生活、工作节奏的日益加快,日常的售后报修、故障报修处理流程给我们带来种种困扰。我们都知道大多数企业、个人用户还在使用传统报修方式,如电话报修、纸质报修单等方式,不仅效率低下,而且难以追踪维修进度,给我们…

无人机+自组网:空地点对点无人机通信解决方案

随着智能化技术的迅速发展, 无人化设备在战场上发挥的作用日益突显。在近期发生的多次局部战争中, 无人设备代替人类承担了多项危险且复杂的攻击任务, 达到 “兵不血刃” 的效果. 2020 年 1 月 3 日, 美军利用无人机执行了刺杀伊朗 “圣城旅” 指挥官苏莱曼尼行动. 纳戈尔诺 - …

48.乐理基础-音符的组合方式-休止符

休止符 音乐中总有一些停顿的地方,一次停顿多久是创作人固定好的,休止符就是用来表示每一次停顿多久 需要停顿的位置就用 0 来表示,数字 0 就是简谱中的休止符 音符有全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符等&…

海外静态IP购买:全面解析与购买指南

在当今这个信息化、网络化的时代,IP地址成为了网络世界中不可或缺的一部分。随着跨国业务的不断增多,海外静态IP的需求也日益增长。海外静态IP,作为一种稳定、可靠的网络资源,为企业在全球范围内的业务拓展提供了强有力的支持。本…

实训八:使用jQuery技术实现企业信息展示系统的相关功能

实训八:使用jQuery技术实现企业信息展示系统的相关功能 1.题目 使用jQuery技术实现企业信息展示系统的相关功能。 2.目的 (1)掌握jQuery的基本知识。 (2)掌握jQuery的应用方法。 (3)进一步理解Ajax程序的设计方法。 (4)会利用所学知识设计简单的应用程序。 3.内容 用jQuery技术…

aws s3

列出关键点 创建s3 设置s3策略,所有人访问 { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", …

Spring Boot | Spring Boot 消息管理 ( 消息中间件 ) 、RabbitMQ“消息中间件“

目录: 一、"消息服务" 概述 :1.1 为什么要使用 "消息服务" ( 消息中间件 ) ?① 异步处理② 应用解耦③ 流量削峰④ 分布式事务管理 1.2 常用 "消息中间件" 介绍 :ActiveMQ ( 广泛应用于中小型企业 )RabbitMQ ( 没有特别要求的场景下…

Unity导出的webgl包在浏览器下报错:Unable to parse Build/导出的项目名称.framework.js.gz

先根据链接Unity WebGL项目打包后本地打开报错问题解决方法_unity 打包webgl报错:webassembly.instantiate()-CSDN博客文档操作一番后,在360极速里面兼容模式——黑屏如图: 极速模式:进度条走不满,在谷歌浏览器里面的红色报错文字不出现。 然后打开谷歌浏览器,报如下错:…

2024年可以做的网上兼职有哪些?10个正规赚钱软件平台分享

在数字化浪潮席卷全球的今天,兼职工作早已不再局限于传统的线下模式。只要有一部手机或电脑,你就能轻松开启兼职之旅,实现躺着也能赚钱的梦想! 接下来,就让我们一起看看2024年那些靠谱又有趣的网上兼职项目吧&#xff…

[猫头虎分享21天微信小程序基础入门教程]第8天:发布与审核流程

第8天:发布与审核流程 🚀 自我介绍 大家好,我是猫头虎,一名全栈软件工程师。今天我们将继续微信小程序的学习,重点了解如何将开发完成的小程序提交审核并发布上线。这是小程序从开发到用户使用的关键步骤。&#x1f…

国标GB28181协议EasyGBS视频监控云平台端口正常却不能播放,是什么原因?

国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入,并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强,支持将接入的视频流进行全终端、全平台分发,分发的视频…

【Linux学习笔记】一篇文章彻底搞定“Linux生产者与消费者“!

本章重点 1.生产者消费者模型2.posix信号量,以及读写锁。3. 理解基于读写锁的读者写者问题。 一. 生产者消费者模型 为何要使用生产者消费者模型 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯&#xff0…

算力网络简介

一、什么是算力网络 在计算能力发展的基础上,通过网络手段,将计算、存储、存储等基础资源,在云、边、端之间进行有效调配的方式,以此提升业务服务质量和用户的服务体验。 移动、联通、电信这类网络运营商作为网络的拥有者&#…

基于微信小程序+JAVA Springboot 实现的【网上商城小程序】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称: 基于微信小程序的网上商城 项目技术栈 该项目采用了以下核心技术栈: 后端框架/库: Java, SSM框架数据库: MySQL前端技术: 微信开发者工具,微信小程序框架 项目展示 5.1 管理员服务…

react18【系列实用教程】moxb —— 集中状态管理 (2024最新版)

官方文档 https://www.mobxjs.com/ moxb 和 redux 都能用于 react 的状态管理,但 moxb 更简单,适合规模不大的应用 (规模大的应用若合理组织代码结构,也能用 moxb) 安装 moxb npm i mobx npm i mobx-react-lite此处安…

Kubernetes的Pod控制器深度解析

1.1 Pod控制器介绍 在Kubernetes中,Pod是最小的管理单元,用于运行容器。根据Pod的创建方式,可以将其分为两类: 自主式Pod(Stateless Pods):这些Pod是直接由用户或管理员创建的,通常…

【058】基于SpringBoot+Vue校园失物招领系统的设计与实现

系统介绍 基于SpringBootVue校园失物招领系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与…

【中级软件设计师】上午题16-算法(应试考试简略版)

上午题16-算法 1 回溯法1.1 n皇后问题 2 分治法3 动态规划3.1 0-1背包问题3.2 最长公共子序列3.3 矩阵连乘 4 贪心算法5 分支限界法总结 1 回溯法 深度优先方法搜索 1.1 n皇后问题 2 分治法 一般来说,分治算法在每一层递归上都有3个步骤 (1&#xff…

kubeflow文档-介绍与架构

1. kubeflow介绍 Kubeflow项目致力于使机器学习(ML)工作流在Kubernetes上的部署变得简单、可移植和可扩展。目标不是重新创建其他服务,而是提供一种直接的方法,将ML的开源系统部署到不同的基础设施中。无论在哪里运行Kubernetes&a…

步入式恒温恒湿试验箱厂家哪家好?DHT(多禾试验)是您不二之选

步入式恒温恒湿试验箱厂家是一种广泛应用于科研、生产和质量控制领域的设备,所以选择一个合适的步入式恒温恒湿试验箱厂家,是确保试验数据准确性和可靠性的核心因素。因此在选择步入式恒温恒湿试验箱厂家时,需要考虑多方面因素,如…