C语言的数据结构:树与二叉树(哈夫曼树篇)

前言

上篇讲完了二叉树,二叉树的查找性能要比树好很多,如平衡二叉树保证左右两边节点层级相差不会大于1,其查找的时间复杂度仅为 l o g 2 n log_2n log2n,在两边层级相同时,其查找速度接近于二分查找。1w条数据,平衡二叉树的查找最差情况下仅有14次,而普通树(也就是多叉树),如果每层都有100个节点,第二层可以接近1w(9999)条数据,其查找的时间复杂度也高的多。

但多叉树在文件系统和数据库的应用中表现很好,像自平衡多叉树(B - 树)其在磁盘io操作的速度也更好,像 mysql 的索引采取就是 B+ 树。

如果上面的二叉树和多叉树在表现中已经这么好了,为什么还要有哈夫曼树这种结构?

哈夫曼树的应用场景主要是数据压缩,特别是通过哈夫曼编码进行文件压缩。哈夫曼树的设计目的是通过构建一棵带权路径长度最小的二叉树,来减少编码长度,提高压缩效率。前提是哈夫曼树的构建要基于权重,也就是这么多的数据,它要知道哪些是经常被访问的,经常访问的则权重高,反之则权重低。

像下面这棵树,如果我们已经知道 D的访问次数较高,一共要访问5次,而B的访问次数只有1次,则将D、B全部访问完需要:
B:路径A -> B, 路径为1,访问次数为1,总访问 路长为 1 \color{orange}路长为1 路长为1
D:路径A -> B -> D ,路径为2,访问次数为5,总访问 路长为 10 \color{orange}路长为10 路长为10
D、B全部访问:1 + 10 = 11 。

但如果按照哈夫曼树的构造,会生成下面这样。
在这里插入图片描述
我们已经知道 D的访问次数较高,一共要访问5次,而B的访问次数只有1次,则将D、B全部访问完需要:
B:路径A -> D -> B, 路径为2,访问次数为1,总访问 路长为 2 \color{orange}路长为2 路长为2
D:路径A -> D ,路径为1,访问次数为5,总访问 路长为 5 \color{orange}路长为5 路长为5
D、B全部访问:5 + 2 = 7 。

可以看到,存储同样的数据,仅仅只是按照权重换了数据的位置,就可以减少总访问路径长度

那一个数据当中,又是如果知道哪些数据会经常访问,哪些是不经常呢?一个是来源于对过往的总结。如一个学校的成绩分布有[小于50、50-80、80-100],而经常几次考试的结果发现,大多数都在50-80的区域,那这个哈夫曼树的最
接近根节点的应该是 50-80 。也有些是通过对文字的出现次数总结,如有人统计出26个英文字母中,什么字母使用的最多,什么字母使用的最少,则也可以构建出基于此的哈夫曼树。而哈夫曼编码就来源于此。

​​

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

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

相关文章

什么是中断?---STM32篇

目录 一,中断的概念 二,中断的意义 三,中断的优先级 四,中断的嵌套 如果一个高优先级的中断发生,它会立即打断当前正在处理的中断(如果其优先级较低),并首先处理这个高优…

uniapp+php开发的全开源多端微商城完整系统源码.

uniappphp开发的全开源多端微商城完整系统源码. 全开源的基础商城销售功能的开源微商城。前端基于 uni-app,一端发布多端通用。 目前已经适配 H5、微信小程序、QQ小程序、Ios App、Android App。 采用该资源包做商城项目,可以节省大量的开发时间。 这…

周边美食小程序系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,美食店铺管理,菜品分类管理,标签管理,菜品信息管理,系统管理 微信端账号功能包括:系统首页,美食店铺&#…

基于SSM+Jsp的疫情居家办公OA系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

20-OWASP top10--XXS跨站脚本攻击

目录 什么是xxs? XSS漏洞出现的原因 XSS分类 反射型XSS 储存型XSS DOM型 XSS XSS漏洞复现 XSS的危害或能做什么? 劫持用户cookie 钓鱼登录 XSS获取键盘记录 同源策略 (1)什么是跨域 (2)同源策略…

容易涨粉的视频素材有哪些?容易涨粉的爆款短素材库网站分享

如何挑选社交媒体视频素材:顶级视频库推荐 在社交媒体上脱颖而出,视频素材的选择至关重要。以下是一些顶级的视频素材网站推荐,不仅可以提升视频质量,还能帮助你吸引更多粉丝。 蛙学网:创意的源泉 作为创意和独特性的…

Databend db-archiver 数据归档压测报告

Databend db-archiver 数据归档压测报告 背景准备工作Create target databend table启动 small warehouse准备北京区阿里云 ECSdb-archiver 的配置文件准备一亿条源表数据开始压测 背景 本次压测目标为使用 db-archiver 从 MySQL 归档数据到 Databend Cloud, 归档的…

【王佩丰 Excel 基础教程】第一讲:认识Excel

文章目录 前言一、Excel软件简介1.1、历史上的其他数据处理软件与 Microsoft Excel1.2、Microsoft Excel 能做些什么1.3、Excel 界面介绍 二、Microsoft Excel 的一些重要概念2.1、Microsoft Excel 的几种常见文件类型2.2、工作簿、工作表、单元格. 三、使用小工具:…

Python_Socket

Python Socket socket 是通讯中的一种方式,主要用来处理客户端与伺服器端之串连,只需要protocol、IP、Port三项目即可进行网路串连。 Python套件 import socketsocket 常用函式 socket.socket([family], [type] , [proto] ) family: 串接的类型可分为…

Java中的Checked Exception和Unchecked Exception的区别

在Java中,异常分为两大类:已检查异常(Checked Exception)和未检查异常(Unchecked Exception)。 已检查异常是在编译时必须被捕获或声明的异常。换句话说,如果你的方法可能会抛出某个已检查异常&…

韩顺平0基础学Java——第33天

p653-674 坦克大战 继续上回游戏 将每个敌人的信息,恢复成Node对象,放进Vector里面。 播放音乐 使用一个播放音乐的类。 第二阶段结束了 网络编程 相关概念 (权当是复习计网了) 网络 1.概念:两台或多台设备通过一定物理设备连…

龙芯久久派到手开机测试

今天刚拿到龙芯久久派,没看到文档,只有视频,我来写个博客,做个记录,免得以后忘记 1.连接usb转ttl串口与龙芯久久派,如图所示。 2.将usb转串口接到电脑USB口 也就是这个接电脑上 3.打开串口调试助手或Secu…

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式4599张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4599 标注数量(xml文件个数):4599 标注数量(txt文件个数):4599 标注…

Android 11.0 修改系统显示大小导航栏消失

Android 11.0 修改系统显示大小导航栏消失 1.显示大小设置为大时,导航栏图标不显示。 设置为大,较大,最大时,导航栏图标不显示。 2.开始怀疑是导航栏被隐藏了,各种折腾无效。 3.发现: frameworks/base/pa…

amis源码 更新组件数据域的几种方法

更新组件数据域的几种方法: 默认都是合并数据,非覆盖(指定replace为true的才是覆盖): const comp amisScoped.getComponentById(id);//或者getComponentByName(name) 1.comp.setData(values, replace); //更新多个值values, r…

Linux多进程和多线程(一)

进程 进程的概念 进程(Process)是操作系统对一个正在运行的程序的一种抽象。它是系统运行程序的最小单位,是资源分配和调度的基本单位。 进程的特点如下 进程是⼀个独⽴的可调度的活动, 由操作系统进⾏统⼀调度, 相应的任务会被调度到cpu …

Python逻辑控制语句 之 判断语句--if else结构

1.if else 的介绍 if else :如果 ... 否则 .... 2.if else 的语法 if 判断条件: 判断条件成立,执行的代码 else: 判断条件不成立,执行的代码 (1)else 是关键字, 后⾯需要 冒号 (2)存在冒号…

【BILIBILIAS】安卓端B站视频下载神器,4K画质轻松get!

B站视频下载的方法之前给大家分享过网页版和电脑版的工具《太猛了!B站视频下载方法!三端通用!》,但是手机上的工具没有给大家分享过。今天今天就给大家分享一个安卓端的B站视频下载神器——BILIBILIAS,可以轻松下载4K画…

【UE 网络】专用服务器和多个客户端加入游戏会话的过程,以及GameMode、PlayerController、Pawn的创建流程

目录 0 引言1 多人游戏会话1.1 Why?为什么要有这个1.2 How?怎么使用? 2 加入游戏会话的流程总结 🙋‍♂️ 作者:海码007📜 专栏:UE虚幻引擎专栏💥 标题:【UE 网络】在网络…

Linux部署Java项目至云服务器

文章目录 1.服务器环境2.发布部署过程2.1 执行SQL脚本2.2 修改代码中数据源的配置2.3 修改配置中的日志级别与日志文件路径2.4 打包Java程序2.5 上传到服务器2.6 后台运行2.7 服务器开放对应的端口2.8 访问验证 1.服务器环境 要将我们的项目部署到云服务器上我们就需要先有一个…