哈夫曼树(Huffman)【数据结构】

目录

​编辑

一、基本概念 

二、哈夫曼树的构造算法 

三、哈夫曼编码 


 

假如<60分的同学占5%,60到70分的占15%……

这里的百分数就是权。 

此时,效率最高(判断次数最少)的树就是哈夫曼树。 

一、基本概念 

权(weight):将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。

结点的带权路径长度:从根结点到该结点之间的路径长度与该结点的权的乘积。

树的路径长度:从树根每一个结点的路径长度之和。记作TL

结点的带权路径长度:从根节点到该结点之间的路径长度与该结点的权的乘积

树的带权路径长度:树中所有叶子结点的带权路径长度之和

哈夫曼树:最优树(带权路径长度最短的树)

注:“带权路径最短”是在度相同的树中比较而得到的。

哈夫曼树:最优二叉树(带权路径长度最短的二叉树)

哈夫曼树中权越大的叶子离跟越近

二、哈夫曼树的构造算法 

 哈夫曼树构造算法的实现:

采用顺序存储结构:一维结构数组 HuffmanTree H;

结点类型定义:

typedef struct
{
    int weight;
    int parent, lch, rch;
}HTNode,*HuffmanTree;

1、初始化HT[1……2n-1]:lch=rch=parent=0;

2、输入初始n个叶子结点:置HT[1……n]的weight值;

3、进行以下n-1次合并,依次产生n-1个结点HT[i],i=n+1……2n-1;

a)在HT[1..i-1]中选两个未被选过(从parent==0的结点中选)的weight最小的两个结点HT[s1]和HT[s2],s1、s2为两个最小结点下标;
b)修改HT[s1]和HT[s2]的parent值:HT[s1].parent=i; HT[s2].parent=i;
D

c)修改新产生的HT[i]:
HT[i].weight=HT[s1].weight + HT[s2].weight;
HT[i].lch=s1;HT[i].rch=s2;

 

 

三、哈夫曼编码 

 

 

 

  

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

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

相关文章

关于宝塔部署jar包和war包

文章目录 前言一、jar包部署二、war包部署1.maven如果打包不了使用命令打包2.安装Tomcat进行访问是否成功2.进入Tomcat目录进行配置war包 一、项目访问方法 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、jar包部署 1.其实jar包没什么讲的&…

使用nvm管理node多版本(安装、卸载nvm,配置环境变量,更换npm淘宝镜像)

目录 前言一、卸载node二、nvm是什么&#xff1f;三、nvm安装1. 官网下载 nvm 包2. 安装 nvm-setup.exe小tips 3. 配置路径和下载镜像4. 检查nvm是否安装完成 四、使用nvm安装node版本五、修改npm默认镜像源为淘宝镜像六、 环境变量配置1. 设置系统变量和用户变量的作用是什么呢…

【从零到Offer】- HashMap与HashSet

​ HashMap与HashSet是我们日常最常使用的两个集合类。在实现上&#xff0c;两者也有很大的相似性。HashSet基本就是对HashMap的一个简单包装。 ​ 为了更好的理解Hash结构的实现原理&#xff0c;从而更好的指导我们的代码使用&#xff0c;本文就主要对HashMap的实现及设计做分…

10 款最常用的Sketch在线插件!

Sketch 是一款高效、小巧的界面设计工具&#xff0c;在设计领域广受设计团队喜爱&#xff0c;帮助设计师创造了许多令人惊叹的作品。在使用 Sketch 时&#xff0c;辅助使用一些插件可以更高效地完成设计任务。Windows 也能用的「协作版 Sketch」即时设计&#xff0c;可作为网页…

《数据库应用系统实践》------ 校友会信息系统

系列文章 《数据库应用系统实践》------ 校友会信息系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构&#xff08;需包含功能结构框图和模块说明&#xff09;3&#xff0e;系统功能简介 二、概念模型设计1&#xff0e;基本要素&#xff08;符号介绍说明&#x…

Linux Kernel RTC驱动使用hwclock调试

hwclock hwclock的源码路径&#xff1a;sys-utils/hwclock.c 源码&#xff1a; if (opt & HWCLOCK_OPT_HCTOSYS)to_sys_clock(&rtcname, utc);else if (opt & HWCLOCK_OPT_SYSTOHC)from_sys_clock(&rtcname, utc);else if (opt & HWCLOCK_OPT_SYSTZ)set_…

Redis 的数据类型和命令帮助

文章结构 Redis 数据类型1. Redis全局命令&#xff08;跟key有关系&#xff0c;而跟value无关&#xff09;2. StringsGetting and setting StringsManaging counters 3. Lists(L)Basic commandsBlocking commands 4. Sets(S)Basic commands 5. Hashes(H)Basic commands 6. Sort…

软考A计划-试题模拟含答案解析-卷九

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

【WPF】数据绑定,资源字典

数据绑定 将数据与视图分开,创建MainViewModel .cs 作为数据源的处理 MainViewModel using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading…

机器学习基础知识之多模型性能对比评价方法

文章目录 1、交叉验证t检验2、Friedman检验与Nemenyi后续检验 在进行预测或分类对比实验时&#xff0c;通常需要比较两个或两个以上的模型性能&#xff0c;因此&#xff0c;下面将介绍两个常用的多模型性能对比评价方法&#xff0c;一种是交叉验证t检验&#xff0c;该方法主要用…

如何用二极管实现不同电压的输出?

利用二极管的单向导电性可以设计出好玩、实用的电路。本文分析限幅电路和钳位电路&#xff0c;是如何用二极管来实现的。 限幅电路 如下图所示&#xff0c;当在正半周期&#xff0c;并且VIN大于等于0.7V&#xff0c;二极管正向导通。此时&#xff0c;VOUT会被钳位在0.7V上。 …

Linux网络服务:PXE高效批量网络装机

目录 一、理论 1.PXE批量网络装机概述 2.搭建 PXE 远程安装服务器 3.实现Kickstart无人值守安装 二、实验 1.搭建PXE远程安装服务器 2.安装Kickstart无人值守安装 3.安装图形化界面 三、问题 1.please complete all spokes before continuing 提示 一、理论 1.PXE批…

供应链|供应商库存服务水平对零售商需求的影响

作者&#xff1a;Nathan Craig, Nicole DeHoratius, Ananth Raman 引用&#xff1a;Craig N, DeHoratius N, Raman A. The impact of supplier inventory service level on retailer demand[J]. Manufacturing & Service Operations Management, 2016, 18(4): 461-474. 文…

【JavaSE】Java基础语法(八)

文章目录 &#x1f353;1. 类和对象&#x1f379;&#x1f379;1.1 类和对象的关系&#x1f379;&#x1f379;1.2 类的定义 &#x1f353;2. 对象内存图&#x1f379;&#x1f379;2.1 单个对象内存图&#x1f379;&#x1f379;2.2 多个对象内存图2.3 多个对象指向相同内存图…

服务器性能优化方法

文章目录 服务器性能优化方法什么是服务器并发处理能力&#xff1f;什么方法衡量服务器的并发能力&#xff1f;怎么提高服务器的并发处理能力&#xff1f;**1&#xff0c;提高CPU并发计算能力**&#xff08;1&#xff09;多进程&多线程&#xff08;2&#xff09;减少进程切…

【Unity】实现无缝地图

无缝地图是沙盒游戏的标配,可以极大提升玩家体验和沉浸感。 无缝地图的实现过程还是比较复杂的,在这里做一下实现笔记 1、地图分块: 将地图划分为较小的块,例如瓦片或区块。每个块可以是一个独立的游戏对象或地形块。确定每个块的大小和位置。你可以使用Unity的Tilemap工具…

二次元的登录界面

今天还是继续坚持写博客&#xff0c;然后今天给大家带来比较具有二次元风格的登录界面&#xff0c;也只是用html和css来写的&#xff0c;大家可以来看看&#xff01; 个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &…

【小程序】封装时间选择组件:用单元格van-cell和插槽slot,包括起始时间和终止时间

效果 可以选择起始时间和终止时间&#xff0c;并显示。 时间选择器放在van-cell的value插槽中。 用的库&#xff1a; https://vant-contrib.gitee.io/vant-weapp/#/home https://dayjs.fenxianglu.cn/category/ 用的组件&#xff1a;Cell单元格、DatetimePicker时间选择、Pop…

Linux——gdb调试器

目录 前言&#xff1a; 二.gdb定义及指令&#xff1a; 如何查看该exe文件是否为Debug版本?两种方法: 三.gdb调试&#xff1a; 调试指令1&#xff1a;l指令(小写L) run指令&#xff1a;运行程序&#xff0c;相当于VS中的直接运行不调试——可简化输入r break指令&#xff1…

解析云盘存储的优缺点:安全靠谱还是存在风险?

云盘是一种基于云计算技术的在线存储服务&#xff0c;用户可以通过互联网将文件上传到云端&#xff0c;并可以随时随地通过网络访问这些文件。 相较于传统的本地存储&#xff0c;云盘具有以下优势&#xff1a; 1.数据安全性更高&#xff1a;云盘使用专业的云计算技术和安全措施…