数据结构--哈夫曼树

news2024/11/25 16:31:12

数据结构–哈夫曼树

带权路径长度

结点的 权 \color{red}权 :有某种现实含义的数值(如:表示结点的重要性等)
结点的带权路径长度 \color{red}结点的带权路径长度 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该结点上权值的乘积 树的带权路径长度 \color{red}树的带权路径长度 树的带权路径长度:树中所有 叶结点 \color{red}叶结点 叶结点的带权路径长度之和(WPL, Weighted Path Length)

W P L = ∑ i = 1 n w i l i \mathrm{WPL}=\sum_{i=1}^{n}w_{i}l_{i} WPL=i=1nwili

哈夫曼树的定义

以上都是哈夫曼树

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

哈夫曼树的构造

给定n个权值分别为 w 1 , w 2 . . . , w n w_1, w_2..., w_n w1,w2...,wn的结点,构造哈夫曼树的算法描述如下:
1)将这n个结点分别作为n棵仅含一个结点的二叉树,构成森林F。
2)构造一个新结点,从F中选取两棵根结点权值最小的树作为新结点的左、右子树,并且将新结点的权值置为左、右子树上根结点的权值之和。
3)从F中删除刚才选出的两棵树,同时将新得到的树加入F中。
4)重复步骤2)和3),直至F中只剩下一棵树为止。

1)每个初始结点最终都成为叶结点,且权值越小的结点到根结点的路径长度越大
2)哈夫曼树的结点总数为2n -1
3)哈夫曼树中不存在度为1的结点。
4)哈夫曼树并不唯一,但wPL必然相同且为最优

W P L m i n = 1 ∗ 7 + 2 ∗ 3 + 3 ∗ 2 + 4 ∗ 1 + 4 ∗ 2 = 31 WPL_{min}=1^*7+2^*3+3^*2+4^*1+4^*2=31 WPLmin=17+23+32+41+42=31

哈夫曼编码

电报――点、划两个信号(二进制0/1)

固定长度编码――每个字符用相等长度的二进制位表示
可变长度编码 \color{red}可变长度编码 可变长度编码――允许对不同字符用不等长的二进制位表示
若没有一个编码是另一个编码的前缀,则称这样的编码为 前缀编码 \color{red}前缀编码 前缀编码
有哈夫曼树得到 哈夫曼编码 \color{red}哈夫曼编码 哈夫曼编码――字符集中的每个字符作为一个叶子结点,各个字符出现的频度作为结点的权值,根据之前介绍的方法构造哈夫曼树

若哈夫曼树不唯一,则对应的哈夫曼编码不唯一 \color{green}若哈夫曼树不唯一,则对应的哈夫曼编码不唯一 若哈夫曼树不唯一,则对应的哈夫曼编码不唯一

哈夫曼编码可用于数据压缩 \color{pink}哈夫曼编码可用于数据压缩 哈夫曼编码可用于数据压缩

知识点回顾与重要考点

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Element UI组件中el-col、el-row布局学习笔记

一、简介 el-col:列。是Element UI布局中的核心组件,他的作用的将一行分成24个网格,为了方便我们在不同的设备上适配不同的屏幕大小。我们可以通过指定span属性来确定一行中所占的网格数。 el-row:行。包裹在el-col外层&#xf…

【单片机】MSP430f5529单片机,msp430单片机,识别按键单击双击,按键双击判定,驱动程序

文章目录 需求思路介绍程序源码 需求 MSP430f5529单片机的开发板上面只有2个按键硬件,但是通过识别双击,就可以拥有4个按键了! 识别按键,单击P2.1返回1,单击P1.1返回2,双击P2.1返回3,双击P1.1…

第一百零三天学习记录:数据结构与算法基础:算法和算法分析

注:截图转自王卓数据结构教学视频 算法和算法分析 算法的定义 对特定问题求解方法和步骤的一种描述,它是指令的有限序列。其中每个指令表示一个或多个操作。 算法的描述 自然语言:英文、中文 流程图:传统流程图、NS流程图 伪…

辅助驾驶功能开发-功能规范篇(22)-2-L2级辅助驾驶方案功能规范

1.3.2 TSR 系统功能定义 1.3.2.1 状态机 1.3.2.2 状态迁移表 初始状态转移状态转移条件INITOFF系统自检过程中,为 OFF 状态,自检无故障且车辆上次掉电前,为 OFF 状态INITON自检无故障,车辆为首次上电,或者上次掉电之前,系统为非 OFF 状态INITFAILURE系统自检故障,且上…

系统架构设计师-软件工程(4)

一、软件测试 1、软件测试类型(动态测试 / 静态测试) ● 动态测试【计算机运行】 (1)白盒测试法【结构测试】:主要用于单元测试阶段。 a:控制流测试【逻辑覆盖测试(语句覆盖最弱&#…

【数据结构与算法】栈算法题

TS 实现栈 interface IStack<T> {push(e: T): void;pop(): T | undefined;peek(): T;isEmpyt(): boolean;size(): number; }// implements: 实现接口, 一个类可以实现多个接口 class ArrayStack<T> implements IStack<T> {private data: T[] []; // private…

【已解决】词云图只显示方框,无法正确显示中文

文章目录 报错及效果图报错代码解决后效果图 解决方案 报错及效果图 报错代码 from wordcloud import WordCloud def drawing_wordcloud(jieba_split):colormaps colors.ListedColormap([#33b846, #a9be70, #e50000])# 生成词云&#xff08;自定义样式&#xff09;mywc1 Wor…

docker 挂载共享文件夹

docker 挂载共享文件夹 1. 目前不太清楚怎么在已经启动的容器中挂载1.1 也不是完全没办法&#xff0c;把当前的容器打包&#xff0c;再使用-v参数重新启动就可以了 1. 目前不太清楚怎么在已经启动的容器中挂载 1.1 也不是完全没办法&#xff0c;把当前的容器打包&#xff0c;再…

运维面试题

这里写目录标题 TCP介绍一下UDP TCP介绍一下 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的传输层协议。它在计算机网络中负责提供可靠的数据传输和流量控制。 TCP通过使用三次握手建立一个连接&#xff0c;确…

内存函数相关讲解与模拟实现

目录 memcpy 模拟实现memcpy memmove 模拟实现memmove memcmp 结尾 memcpy 由 source指向地址为起始地址的连续n个字节的数据复制到以destination指向地址为起始地址的空间内。格式如下 void * memcpy ( void * destination, const void * source, size_t num ); 说明…

C语言 — 指针进阶篇(下)

前言 指针基础篇回顾可以详见&#xff1a; 指针基础篇&#xff08;1&#xff09;指针基础篇&#xff08;2&#xff09; 指针进阶篇分为上下两篇,上篇介绍1 — 4&#xff0c;下篇介绍5 — 6 字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的…

SpringBoot 配置文件:什么是配置文件?配置文件是干什么?

文章目录 &#x1f387;前言1.配置文件的格式2. properties配置文件说明2.1 properties基本语法2.2 读取配置文件 3. yml 配置文件说明3.1 yml 基本语法 4.properties与yml 对比 &#x1f387;前言 学习一个东西&#xff0c;我们先要知道它有什么用处。整个项目中所有重要的数…

C语言,指针易错点

1、封装函数&#xff0c;用指针实现字符串连接 #include <stdio.h> #include <string.h> void MyStrcat(char *dest,char *src) {int i;for(i0;*(desti);i);for(int j0;*(srcj);j)*(desti)*(srcj);*(desti)0; } int main(int argc, const char *argv[]) {char des…

Spring详解(学习总结)

目录 一、Spring概述 &#xff08;一&#xff09;、Spring是什么&#xff1f; &#xff08;二&#xff09;、Spring框架发展历程 &#xff08;三&#xff09;、Spring框架的优势 &#xff08;四&#xff09;、Spring的体系结构 二、程序耦合与解耦合 &#xff08;一&…

MySQL与PostgreSQL的区别

MySQL与PostgreSQL的区别 PostgreSQL的特点包括&#xff1a; 1.PostgreSQL是一个免费的对象-关系数据库服务器 (ORDBMS)&#xff0c;在灵活的BSD许可证下发行。 2.PostgreSQL的Slogan是"世界上最先进的开源关系型数据库"。 3.PostgreSQL具有极高的可靠性&#xff…

数据结构--并查集的进一步优化

数据结构–并查集的进一步优化 Find操作的优化(压缩路径) 压缩路径 − − F i n d 操作&#xff0c;先找到根节点&#xff0c;再将查找路径上所有结点都挂到根结点下 \color{red}压缩路径 -- Find操作&#xff0c;先找到根节点&#xff0c;再将查找路径上所有结点都挂到根结点…

第二十三章:存储引擎

第二十三章&#xff1a;存储引擎 ​ 为了管理方便&#xff0c;人们把连接管理、查询缓存、语法解析、查询优化这些并不设计真实数据存储的功能划分为MySQL server的功能&#xff0c;把真实存取数据的功能划分为存储引擎的功能。所以在MySQL server完成了查询优化后&#xff0c…

各种好看的css效果收集

CSS动画特效-多种方案实现CSS光束扫过&#xff0c;扫光特效&#xff0c;ae文字过光效果&#xff0c;光效移动效果 一个集合180种免费的线性渐变网站&#xff0c;可在任何网站使用您不仅可以复制渐变的原生CSS颜色代码&#xff0c;还可以查看下载每个优质的渐变图片。 链接&…

多线程——python进阶知识

多线程与多进程的区别 多线程是单个内核通过锁的手段实现同一时间运行多个程序&#xff0c;在某些情况下可以提升总体的运行效率。同时为了防止多个线程在对同一数据进行修改时导致的不可预测的后果&#xff0c;需要借助锁、队列等保证进程的同步。 多进程是多个内核执行多个…

(赠书活动第4期)编译语言的思考过程

面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种广泛应用于编程领域的编程范式&#xff0c;对于前端和后端开发都具有重要意义。在这篇说明中&#xff0c;我们将探讨面向对象编程对于前端和后端开发的重要性&#xff0c;并探讨其优…