24考研数据结构-哈夫曼树与哈夫曼编码

news2024/11/15 12:35:07

这里写目录标题

  • 5.5树与二叉树的应用
    • 5.5.1 哈夫曼树和哈夫曼编码
        • 1. 带权路径长度的定义
        • 2. 哈夫曼树的定义(最优二叉树,不唯一)
        • 3. 哈夫曼树的构造
        • 4. 哈夫曼树的特点
        • 5.哈夫曼编码(最短二进制前缀编码)
    • 数据结构:带权路径长度(Weighted Path Length)
    • 1. 什么是带权路径长度
    • 2. 计算带权路径长度
    • 3. 应用:哈夫曼树和赫夫曼编码
    • 4. 总结
    • 数据结构之哈夫曼树与哈夫曼编码
      • 哈夫曼树
        • 1. 基本概念
        • 2. 构建方法
        • 3. 举例说明
      • 哈夫曼编码
        • 1. 基本概念
        • 2. 编码方法
        • 3. 举例说明
      • 应用与总结

5.5树与二叉树的应用

5.5.1 哈夫曼树和哈夫曼编码

1. 带权路径长度的定义

权值大于零
在这里插入图片描述

2. 哈夫曼树的定义(最优二叉树,不唯一)

在这里插入图片描述

3. 哈夫曼树的构造

每次都选取权值最小的结点构成一棵树,并且新的树的根节点的权值为两个子结点的权值之和,重复这个步骤就能构成哈夫曼树
在这里插入图片描述

4. 哈夫曼树的特点

叶子结点n,度为二的结点n-1
在这里插入图片描述

5.哈夫曼编码(最短二进制前缀编码)

  • 固定长度编码
    在这里插入图片描述
  • 可变长度编码(无歧义)

在这里插入图片描述

数据结构:带权路径长度(Weighted Path Length)

在计算机科学中,带权路径长度(Weighted Path Length,简称WPL)是一种用于度量二叉树的平衡性的指标。它是通过将每个节点的深度与节点上的权值相乘,并将所有节点的权值之和作为二叉树的WPL。WPL在树的构建和优化中起着重要的作用,特别是在哈夫曼树和赫夫曼编码中有广泛应用。

1. 什么是带权路径长度

在二叉树中,每个节点都有一个权值,而节点的深度指的是从根节点到该节点的路径的长度(边的数量)。带权路径长度是将每个节点的深度与节点上的权值相乘,并将所有节点的权值之和作为二叉树的WPL。简而言之,WPL是树中所有路径长度与对应节点权值乘积的总和。

2. 计算带权路径长度

计算带权路径长度是一个简单而重要的过程。对于一个给定的二叉树,我们可以通过先序遍历或后序遍历的方式遍历树的每个节点,并计算每个节点的权值和深度的乘积,然后将所有节点的乘积相加即可得到WPL。

3. 应用:哈夫曼树和赫夫曼编码

带权路径长度在哈夫曼树和赫夫曼编码中有广泛的应用。哈夫曼树是一种特殊的最优二叉树,它的带权路径长度最小。在哈夫曼树中,权值较大的节点会位于树的较低层,而权值较小的节点会位于树的较高层,从而使得整个树的带权路径长度最小。赫夫曼编码是一种对字符进行编码的方法,它利用了哈夫曼树的特性,将出现频率较高的字符用较短的编码表示,而出现频率较低的字符用较长的编码表示,从而达到节省编码空间的目的。

4. 总结

带权路径长度是一种用于度量二叉树平衡性的重要指标,在计算机科学中有广泛的应用。通过将每个节点的深度与节点上的权值相乘,并将所有节点的权值之和作为二叉树的WPL,我们可以有效地评估树的结构是否平衡。特别是在哈夫曼树和赫夫曼编码中,带权路径长度的概念发挥了关键作用,帮助我们构建最优二叉树和高效的编码方案。

通过对带权路径长度的深入理解,我们可以更好地理解二叉树的结构和优化算法,并在解决实际问题中灵活运用。在学习数据结构和算法时,带权路径长度是一个重要的概念,值得我们深入学习和探索。

数据结构之哈夫曼树与哈夫曼编码

在计算机科学中,哈夫曼树(Huffman Tree)与哈夫曼编码(Huffman Coding)是数据压缩领域中常用的算法。它们能够将出现频率较高的字符用较短的编码表示,从而实现数据的高效压缩与解压缩。本文将详细介绍哈夫曼树与哈夫曼编码的原理与应用。

哈夫曼树

1. 基本概念

哈夫曼树是一种特殊的二叉树,它通过构建具有最小带权路径长度的二叉树来实现数据压缩。在哈夫曼树中,频率较高的字符将被赋予较短的编码,频率较低的字符将被赋予较长的编码。这样,编码后的数据可以达到最优的压缩效果。

2. 构建方法

构建哈夫曼树的基本方法是:首先将待编码的字符按照出现频率从小到大排列,然后不断合并出现频率最小的两个节点,直到所有节点都合并为一个根节点,形成哈夫曼树。在合并节点的过程中,将左子树的编码设为’0’,右子树的编码设为’1’,最终得到每个字符的哈夫曼编码。

3. 举例说明

假设有一个字符串"ABCDABCA",其中字符A出现了3次,字符B出现了2次,字符C出现了2次,字符D出现了1次。我们可以使用哈夫曼树对该字符串进行编码:

  • 将字符按照频率从小到大排列:D(1) < B(2) = C(2) < A(3)。
  • 不断合并出现频率最小的两个节点,得到以下哈夫曼树:
       8
      / \
     3   5
    / \ / \
   D   A   B+C
  • 对树中的左子树赋予’0’编码,右子树赋予’1’编码,得到字符的哈夫曼编码:
A: 1
B: 01
C: 00
D: 001

哈夫曼编码

1. 基本概念

哈夫曼编码是根据哈夫曼树得到的每个字符的编码。编码的长度与字符在哈夫曼树中的层数相关,出现频率较高的字符编码较短,出现频率较低的字符编码较长。通过对字符串进行哈夫曼编码,可以将原始数据进行高效压缩,从而减少数据的存储空间。

2. 编码方法

根据哈夫曼树的构建方法,每个字符的编码由根节点到对应字符的路径上的’0’和’1’组成。从根节点开始,沿着树的路径找到目标字符的叶子节点,记录所经过的’0’和’1’,即为该字符的哈夫曼编码。

3. 举例说明

以前面构建的哈夫曼树为例,得到的哈夫曼编码为:

  • A: 1
  • B: 01
  • C: 00
  • D: 001

将字符串"ABCDABCA"进行编码,得到的哈夫曼编码为:“10101000101000100”,经过哈夫曼编码后,原始字符串被压缩为较短的二进制编码,实现了数据的高效压缩。

应用与总结

哈夫曼树与哈夫曼编码在数据压缩与解压缩中有着广泛的应用。它们能够将出现频率较高的字符用较短的编码表示,从而实现对数据的高效压缩与解压缩。哈夫曼树和哈夫曼编码是一种简单而高效的数据压缩算法,在计算机科学和通信领域得到了广泛的应用。通过深入了解和掌握哈夫曼树与哈夫曼编码的原理与应用,我们可以更好地理解数据压缩的技术,提高数据处理的效率,为计算机科学和通信领域的发展做出贡献。

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

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

相关文章

Windows terminal 添加 git bash 解决git中文乱码显示问题

Windows terminal 添加 git bash 解决git中文乱码显示问题 在 windows terminal 中配置git 说明&#xff1a; 点击箭头选择设置 说明&#xff1a; 点击"添加新配置文件"配置名称命令行&#xff0c;可执行文件的具体语句 C:\Program Files\Git\bin\bash.exe启动目录…

【100天精通python】Day25:python的编程方式以及并发编程详解

目录 专栏导读 1 python的编程方式 2 顺序编程 3 面向对象编程 4 函数式编程 5 并发编程 5.1 多线程编程 threading模块常用用法 1 创建线程&#xff1a; 2 启动线程&#xff1a; 3 等待线程执行完毕&#xff1a; 4 获取当前活动线程数量&#xff1a; 5 获取当前线程…

elasticSearch常见的面试题

常见的面试问题 描述使用场景 es集群架构3个节点&#xff0c;根据不同的服务创建不同的索引&#xff0c;根据日期和环境&#xff0c;平均每天递增60*2&#xff0c;大约60Gb的数据。 调优技巧 原文参考&#xff1a;干货 | BAT等一线大厂 Elasticsearch面试题解读 - 掘金 设计阶…

Mac 安装不在 Apple 商店授权的应用程序

文章目录 一、场景介绍二、实操说明 一、场景介绍 在日常的工作生活中&#xff0c;发现一些好用的应用程序&#xff0c;但是出于某些原因&#xff0c;应用程序的开发者并没有将安装包上架到苹果商店。 那么这些优秀的应用程序下载安装以后就会出现如下弹框被拒之门外 二、实操…

【react】react生命周期钩子函数:

文章目录 一、生命周期概念:二、生命周期:三、挂载阶段&#xff08;constructor > render > componentDidMount&#xff09;&#xff1a;四、更新阶段&#xff08;render > componentDidUpdate&#xff09;&#xff1a;五、卸载阶段&#xff08;componentWillUnmount …

基于STM32+微信小程序设计的个人健康助手(腾讯云IOT)

一、设计需求 1.1 项目背景 21世纪,社会高速发展,生活物质越来越丰富。为了追求更高的物质享受,人们不断消耗人体健康机制去拼搏,导致身体抵抗能力下降,引发各种疾病。因此,身体健康状况越来越备受大家的关注,健康意识也得到普遍提高。正常的体温是保障人体内部器官工…

【雕爷学编程】MicroPython动手做(36)——MixPY之Hello world 2

MixPY——让爱(AI)触手可及 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#xff1a;3W单…

Linux中提示No such file or directory解决方法

说明&#xff1a; 在linux下&#xff0c;./xxx.sh执行shell脚本时会提示No such file or directory。但shell明明存在&#xff0c;为什么就是会提示这个呢&#xff1f; 这种其实是因为编码方式不对&#xff0c;如你在win下编辑sh&#xff0c;然后直接复制到linux下面 实现&…

使用idea如何生成webservice客户端

需求阐述 在和外围系统对接的时候&#xff0c;对方只给了wsdl地址&#xff0c;记得之前了解到的webservice&#xff0c;可以用idea生成客户端代码。先记录生成的步骤 使用idea如何生成webservice客户端 1.创建一个Java项目 2.第二步生成代码 我的idea再右键要生成文件目录里…

使用 LangChain 搭建基于 Amazon DynamoDB 的大语言模型应用

LangChain 是一个旨在简化使用大型语言模型创建应用程序的框架。作为语言模型集成框架&#xff0c;在这个应用场景中&#xff0c;LangChain 将与 Amazon DynamoDB 紧密结合&#xff0c;构建一个完整的基于大语言模型的聊天应用。 本次活动&#xff0c;我们特意邀请了亚马逊云科…

stm32与上位机电脑间最快的通信方式是什么?

对于小型多关节机械臂的控制电路设计&#xff0c;选择合适的通信方式可以提高MCU与上位机之间的实时性。以下是一些在STM32上常用的通信方式&#xff0c;你可以根据你的具体需求选择适合的&#xff1a; 串口通信&#xff08;UART&#xff09;&#xff1a;串口通信是一种常见的…

小米平板6将推14英寸版!与MIX Fold 3同步推出

今天&#xff0c;知名数码博主数码闲聊站爆料消息&#xff0c;称小米平板6将推出一款Max版本&#xff0c;预计与小米MIX Fold 3同步推出。 据介绍&#xff0c;小米平板6 Max将是小米首款14英寸大屏的旗舰平板&#xff0c;平板搭载骁龙8处理器&#xff0c;在性能释放、影音表现、…

硅谷AI启示录,中国式AI 避坑指南

点击关注 ​ 《AI未来指北》栏目由腾讯新闻推出&#xff0c;邀约全球业内专家、创业者、投资人&#xff0c;探讨AI领域的技术发展、商业模式、应用场景及治理挑战&#xff0c;本期聚焦硅谷近期AI投融资现状。 文丨郝 鑫 编丨苏扬、刘雨琦、王一粟 一扫去年裁员、股价暴跌的阴霾…

Spring和其IOC和DI

spring是干什么的&#xff1f; Spring 是一个开源的Java应用程序框架&#xff0c;最初由Rod Johnson在2003年创建。Spring 的初衷是为了简化企业级Java应用程序的开发&#xff0c;并提供一种灵活、可扩展、易于测试和维护的编程模型。 先来看看Spring 框架诞生的初衷&#xff…

如何从Pytorch中导出ONNX模型并使用它实现图像超分

前言 在本教程中&#xff0c;我们将介绍如何将 PyTorch 中定义的模型转换为 ONNX 格式&#xff0c;然后使用 ONNX 运行时运行它。 ONNX 运行时是面向 ONNX 模型的以性能为中心的引擎&#xff0c;可跨多个平台和硬件&#xff08;Windows、Linux 和 Mac&#xff09;以及 CPU 和 G…

Qlik Sense Desktop安装配置

Qlik Sense 是一种数据可视化分析的产品&#xff0c;允许从多个数据原进行数据读取并进行分析。而Qlik Sense Desktop作为桌面端的解决方案&#xff0c;为用户提供可视化创建、交互数据可视化、报告和仪表板等功能&#xff0c;目前只支持Windows系统。 注意&#xff1a;事先需要…

设计模式、Java8新特性实战 - List<T> 抽象统计组件

一、背景 在日常写代码的过程中&#xff0c;针对List集和&#xff0c;统计里面的某个属性&#xff0c;是经常的事情&#xff0c;针对List的某个属性的统计&#xff0c;我们目前大部分时候的代码都是这样写&#xff0c;每统计一个变量&#xff0c;就要定义一个值&#xff0c;且…

C++、python双语言弹窗教程与对比

Messagebox弹窗 MessageBox指的是显示一个模态对话框&#xff0c;其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息&#xff0c;如状态或错误的信息。消息框中返回一个整数值&#xff0c;该值指示用户单击了哪个按钮。 例子&#xff1a; 本文介绍了用C、Pytho…

STM32基础入门学习笔记:核心板 电路原理与驱动编程

文章目录&#xff1a; 一&#xff1a;LED灯操作 1.LED灯的点亮和熄灭 延迟闪烁 main.c led.c led.h BitAction枚举 2.LED呼吸灯&#xff08;灯的强弱交替变化&#xff09; main.c delay.c 3.按键控制LED灯 key.h key.c main.c 二&#xff1a;FLASH读写程序(有…

数据安全能力框架模型-详细解读(二)

数据安全能力框架构成 1&#xff09; 数据安全治理 管理视角&#xff1a;从组织制度流程上提出要求&#xff0c;由于数据在各业务系统之间流转&#xff0c;需要设立高级管理层参与决策的数据安全管理部门&#xff0c;统筹和规划多部门之间的工作&#xff1b;需要设立跨组织的…