数据结构--哈夫曼树

数据结构–哈夫曼树

带权路径长度

结点的 权 \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.mzph.cn/news/753.shtml

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

相关文章

小程序MobX创建store并实现全局数据共享

查看小程序根目录中是否存在package.json文件 在项目根目录运行cmd 没有package.json文件输入npm init -y初始化一下,初始化一个包管理 安装MobX npm install --save mobx-miniprogram4.13.2 mobx-miniprogram-bindings1.2.1 小程序菜单栏工具–构建npm 根目录创建store文…

el-ment ui 表格组件table实现列的动态插入功能

在实际需求中我们经常遇到各种奇葩的需求,不足为奇。每个项目的需求各不相同,实现功能的思路大致是一样的。 本文来具体介绍怎么实现table表格动态插入几列。 首先实现思路有2种, 1. 插入的位置如果是已知的,我知道在哪个标题的…

设计模式之建造者设计模式

写在前面 不知道,你在工作中有没有使用过lombok,如果你使用过,不知道你有没有使用过其中的Builder注解,其就会帮我们生成建造者设计模式相关的代码,本文就一起来看下吧! 1:介绍 1.1&#xff…

spark启动HA时workers为0,且为standby状态

今天学习一个spark视频,在启动StandAloneHa模式的时候,发现workers为0,而且spark两个master的状态都为standby,找了很久,才知道我用的spark3.2 最低支撑的zookeeper版本为3.5.x,而且zookeeper的安装包是需要带bin的那个…

CSS3 动画 animation 入门学习笔记 之 属性详解

文章目录 简单介绍 CSS 动画CSS 动画的作用CSS 动画语法介绍CSS 动画属性animation-nameanimation-durationanimation-delayanimation-directionanimation-iteration-countanimation-play-stateanimation-timing-functionanimation-fill-modeanimation 简单介绍 CSS 动画 引用…

基于深度学习的高精度80类动物目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度80类动物目标检测识别系统可用于日常生活中或野外来检测与定位80类动物目标,利用深度学习算法可实现图片、视频、摄像头等方式的80类动物目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YO…

Matplotlib是什么

Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂,深受广大技术爱好者喜爱。 NumPy 是 Python 科学计算的软件包,ndarray 则…

HTTP1.1 wireshark分析

目录 http1.1wireshark分析http 1.1 keep-alive的2次http请求wireshark分析http1.1 keep-alive过期的2次请求keep-alive报文 本地springboot启动一个简单的服务,然后请求测试 tcpdump -i lo0 -nnvv -w tmp.cap tcpdump 本地回环网卡 http1.1 HTTP/1.0 每进行一次…

蚂蚁集团开源可信隐私计算框架「隐语」:开放、通用

7 月 4 日,蚂蚁集团宣布面向全球开发者正式开源可信隐私计算框架 “隐语”。 隐语是蚂蚁集团历时 6 年自主研发,以安全、开放为核心设计理念打造的可信隐私计算技术框架,涵盖了当前几乎所有主流隐私计算技术。 据介绍,隐语内置 MPC、TEE、同态等多种密态计算虚拟设备,提…

操作系统练习:创建内核模块,并加载和卸载模块

说明 本文记录如何创建和编译一个内核模块,以及加载和卸载内核模块。为《操作系统概念(第九版)》第二章,关于“Linux内核模块”的练习题。 创建内核模块 注:我这里是基于阿里云的轻量应用服务器(即当前博客服务器) 首…

【Linux】分布式监控 Zabbix

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Zabbix 介绍zabbix 概述Zabbix 监控原理Zabbix 6.0 新特性Zabbix 6.0 功能组件 Zabbix 6.0 部署Zabbix 添加客户端主机Zabbix 自定义监控内容Zabbix 自动发现与自动…

Python+Requests+Excel接口测试实战

1、EXCEL文件接口保存方式,如图。 2、然后就是读取EXCEL文件中的数据方法,如下: 1 import xlrd2 3 4 class readExcel(object):5 def __init__(self, path):6 self.path path7 8 property9 def getSheet(self): 10 …

android更换开机动画

android11 路径:device / {vendor-name} / {platform-name} / {device-name} / system / bootanimation.zip 例:android \ device \ softwinner \ ceres \ ceres-b6 \ system \ bootanimation.zip android13 路径:device / softwinner / {PRO…

MyBatis全篇

文章目录 MyBatis特性下载持久化层技术对比 搭建MyBatis创建maven工程创建MyBatis的核心配置文件创建mapper接口创建MyBatis的映射文件测试功能加入log4j日志功能加入log4j的配置文件 核心配置文件的完善与详解MyBatis的增删改查测试功能 MyBatis获取参数值在IDEA中设置中配置文…

《TCP/IP网络编程》第3,4章学习记录

基础知识: struct sockaddr_in {sa_family_t sin_family; //地址族(Address Family)uint16_t sin_port; //16位TCP/UDP端口号struct in_addr sin_addr; //32位IP地址char sin_zero[8]; //不使用 }sa_family_t包括: (1)AF_INET,IPv4网络协议…

Linux宝塔Mysql读写分离配置,两台服务器,服务器存在多个库

Linux宝塔Mysql读写分离配置,两台服务器,服务器存在多个库 一、主库操作 #登录数据库,用root登录方便,用其他账号会提示权限不足,需要登录root给予权限 mysql -u root -p 密码#创建一个账号,供从库用该账…

大屏项目也不难

项目环境搭建 使用create-vue初始化项目 npm init vuelatest准备utils模块 业务背景:大屏项目属于后台项目的一个子项目,用户的token是共享的 后台项目 - token - cookie 大屏项目要以同样的方式把token获取到,然后拼接到axios的请求头中…

网络编程 socket

目录 网络编程 套接字(socket)1. 认识端口号2. TCP协议3. UDP协议4. 网络字节序列5. 常见的套接字6. socket编程接口6.1 socket常见APIsocket函数recvfrom函数sendto函数read函数 从tcp socket中读取接收数据 6.2 sockaddr结构6.3 地址转换函数6.4 udp s…

JVM内存结构—— 程序计数器,虚拟机栈 解析

JVM的内存结构 1. 程序计数器(PC Register )寄存器 1.1 全称:Program Counter Register 1.2 作用 首先,java源代码 被 编译成 二进制的 字节码 (jvm指令) jvm跨平台就是这一套指令,linux 下,windows下指令都是一致的 指令 经过 解释器 把每一条指令 解释成 机器码…

SpringBoot项目从0到1配置logback日志打印

大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 以下是正文! 一、写文背景 我们在写后端…