当前位置: 首页 > news >正文

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个英文字母中,什么字母使用的最多,什么字母使用的最少,则也可以构建出基于此的哈夫曼树。而哈夫曼编码就来源于此。

​​

相关文章:

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

前言 上篇讲完了二叉树,二叉树的查找性能要比树好很多,如平衡二叉树保证左右两边节点层级相差不会大于1,其查找的时间复杂度仅为 l o g 2 n log_2n log2​n,在两边层级相同时,其查找速度接近于二分查找。1w条数据&am…...

docker 安装syslog

Syslog-ng是一个可靠、多功能的日志管理系统,用于收集日志并将其转发到指定的日志分析工具。 使用Docker CLI方式搭建 步骤 1: 拉取Syslog-ng镜像 首先,需要从Docker Hub拉取Syslog-ng的官方镜像。 docker pull balabit/syslog-ng:latest 步骤 2: 启动…...

什么是无头浏览器?

简而言之,无头浏览器是没有图形用户界面 (GUI) 的 Web 浏览器。GUI 包括用户与之交互的数字元素,例如按钮、图标和窗口。但是,关于无头浏览器,您需要了解的还有很多。 在本文中,您将了解什么是…...

【面试干货】与的区别:位运算符与逻辑运算符的深入探讨

【面试干货】&与&&的区别:位运算符与逻辑运算符的深入探讨 1、&:位运算符2、&&:逻辑运算符3、&与&&的区别 💖The Begin💖点点关注,收藏不迷路💖 & 和 …...

搭建Renesas R7FA8D1BHECBD-BTB的开发调试环境(DAP-LINK: N32G45XVL-STB)

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL产生测试项目 2.1 FSP生成项目 2.2 Keil中配置 3 硬件连接框图 4 一个测试案例 4.1 功能介绍 4.2 定时器函数 5 测试 搭建Renesas R7FA8D1BHECBD-BTB的开发调试环境&#xff08…...

探索人工智能和LLM对未来就业的影响

近年来,人工智能(AI)迅猛发展,引发了人们的兴奋,同时也引发了人们对就业未来的担忧。大型语言模型(LLM)就是最新的例子。这些强大的人工智能子集经过大量文本数据的训练,以理解和生成…...

钓鱼网站原理与攻防

知识点:LAMP平台部署,Web架构分析,钓鱼网站原理与搭建 中间件: 中间件是一种独立的软件,位于客户机和服务器之间,主要用于在网络环境中进行数据的传输和通信。它充当客户端和服务端之间的桥梁,…...

Windows 中 Chrome / Edge / Firefox 浏览器书签文件默认存储路径

1. Chrome 浏览器 按组合键 Win R,打开运行对话框,输入 %USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default或在Chrome 浏览器地址栏输入 chrome://version查看【个人资料路径】 2. Edge 浏览器 按组合键 Win R,打开运行对…...

秋招Java后端开发冲刺——关系型数据库篇(Mysql)

本文介绍关系型数据库及其代表Mysql数据库,并介常见面试题目。 一、数据库概述 1. 数据库(Database, DB):是长期储存在计算机内的、有组织的、可共享的数据集合。 2. 数据库管理系统(Database Management System, D…...

DHCP原理1-单个局域网出现多个DHCP服务器会发生什么

1. 背景 DHCP全称是Dynamic Host Configuration Protocol。其协议标准是RFC1541(已被RFC2131取代),主要实现服务器向客户端动态分配IP地址(如IP地址、子网掩码、网关、DNS)和配置信息。其系统架构是标准的C/S架构。RFC…...

24/06/29(21.1205)程序的编译和链接

源文件 ---> 可执行文件,这一过程要执行的流程: 预处理 编译 汇编 链接 组成每一个程序的每个源文件通过编译过程分别转换成目标代码;每个目标代码由链接器捆绑在一起,形成一个单一而完整的可执行程序;链接器同时也会引入标准函数库中任何被该程序所用到的函数,而且它可以…...

使用Java Executors框架处理并发任务

一、并发与Java Executors框架简介 一、并发编程的重要性 并发编程是现代编程中最重要的概念之一。在更多的核心和更快的处理器出现的今天,如何充分利用这些资源就变得异常重要。并发编程允许你的程序同时处理多个任务,从而使程序更有效地利用系统资源,提高执行效率。 提…...

LeetCode:经典题之144、94、145、102题解及延伸|二叉树的遍历|前中后层序遍历|Morris算法

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …...

ONLYOFFICE 桌面编辑器 8.1全新发布,更强大的编辑工具

ONLYOFFICE 8.1 一、什么是ONLYOFFICE?二、怎么安装 ONLYOFFICE 8.1三、主要功能介绍四、总结 一、什么是ONLYOFFICE? ONLYOFFICE 是一款功能强大的办公套件,旨在提供全面的文档、表格和演示文稿编辑解决方案。它集成了文字处理、电子表格和演…...

百日筑基第六天-了解一下Dubbo

百日筑基第六天-了解一下Dubbo Dubbo 是一款高性能、轻量级的开源 WEB 和 RPC 框架。 Dubbo 提供了六大核心能力: 面向接口代理的高性能 RPC 调用。智能容错和负载均衡。服务自动注册和发现。高度可扩展能力。运行期流量调度。可视化的服务治理与运维。 简单来说…...

微机原理 复习

第一章导论 1.3 冯诺依曼体系结构 (1)以二进制形式表示指令和数据 (2)程序和数据事先放在存储器中(预存储) (3)由运算器、控制器、输入设备和输出设备五大部件组成 字长、主频…...

5年工作经验面试经验以及面试题分享

第一家面试题 评价 全是八股文 面试题 MySQL索引类型 索引结构 联合索引可以设置索引类型 不同索引性能差异巨大 基础索引有哪些 B Tree索引和Hash索引 Redis基本数据结构 List是原子的吗 原子性和可见性区别是什么 MySQL的存储过程和视图 MySQL性能优化有哪些 MySQL的存储…...

C# enum Enumeration Type 枚举

定义枚举使用枚举访问枚举值枚举与switch语句枚举特性枚举与位字段总结 在 C#中, enum 是一种特殊的值类型,它允许你为一组相关的常量定义一个名称。枚举提供了一种将一组整数值与更易读的名称关联起来的方法。 定义枚举 你可以使用 enum 关键字来定义…...

【ajax07基础】回调函数地狱

一:什么是回调函数地狱 在一个回调函数中嵌套另一个回调函数(甚至一直嵌套下去),形成回调函数地狱 回调函数地狱存在问题: 可读性差异常捕获严重耦合性严重 // 1. 获取默认第一个省份的名字axios({url: http://hmaj…...

华为升腾显卡选型备忘

目录 1. 开发套件 2. 加速模块 3. 加速卡 4. 训练卡 官方地址:https://www.hiascend.com/ 备注: (1)V后缀的都是Video视频解析卡,本质是推理卡; (2)I后缀的都是推理卡&#…...

docker详细操作--未完待续

docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...