【数据结构(邓俊辉)学习笔记】二叉树04——Huffman树

文章目录

  • 0. 概述
  • 1. 无前缀冲突编码
  • 2. 编码成本
  • 3. 带权编码成本
  • 4. 编码算法
  • 5. 算法实现流程
  • 6. 时间复杂度与改进方案

0. 概述

学习Huffman树。

1. 无前缀冲突编码

在这里插入图片描述
在加载到信道上之前,信息被转换为二进制形式的过程称作编码(encoding);反之,经信道抵达目标后再由二进制编码恢复原始信息的过程称作解码(decoding)。

编码和解码的任务分别由发送方和接收方分别独立完成,故在开始通讯之前,双方应已经以某种形式,就编码规则达成过共同的约定或协议。

解码策略——前缀无歧义编码PFC(prefix-free code):按顺序对信息比特流做子串匹配的策略,因此为消除匹配的歧义性,任何两个原始字符所对应的二进制编码串,相互都不得是前缀。
在这里插入图片描述
利用二叉编码树方法可解决消息解码歧义问题,可以使通讯双方交换信息,进行沟通。

2. 编码成本

接下来讨论新的问题——如何使编码更有效? 首先来看如何对编码长度做“度量”。
在这里插入图片描述
字符x的编码长度|rps(x)|就是其对应叶节点的深度depth(v(x))。
在这里插入图片描述
上图都是对四个字符MAIN同一编码表的三种编码方式——左中右。它们的编码长度是不一样的,发送MAIN单词,左边占9bit,中间占8bit,右边占9bit,中间的编码长度相对较优,需要这么较劲吗?会影响到带宽、费用、成本和用户体验。

问题关键点——怎么才能编程最优编码方式呢?

通过观察不难得出,树结构越平衡越好——杜绝树中节点深度差过大(大于等于2)。再接着问,如何让树变的平衡呢?

结论:

  1. 最优二叉编码树必为真二叉树:内部节点的左、右孩子全双。
  2. 最优编码树中,叶节点位置的选取有严格限制——其深度之差不得超过1。

叶子只能出现在倒数两层内——否则,通过节点交换可以。

3. 带权编码成本

在这里插入图片描述
以上最优编码树算法的实际应用价值并不大,除非中各字符在文本串中出现的次数相等。因此需面对一个事实——词频差异很大,这种情况下,完全树未必就是最优编码树,如上图,应该从另一角度更为准确地衡量平均编码长度。

在这里插入图片描述
总结:让频率更高的字符放在树高处,让频率更低的字符放在树的低处。

4. 编码算法

在这里插入图片描述
结论:尽管贪心策略未必总能得到最优解,但非常幸运,如上算法的确能够得到最优编码树之一。

5. 算法实现流程

  • 总体框架
    在这里插入图片描述
  • 最小超字符

在这里插入图片描述

  • 构造编码表
    在这里插入图片描述

6. 时间复杂度与改进方案

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【随笔】Git 实战篇 -- Git Rebase出错?手把手教你如何优雅地解决常见问题 (四十二)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

JAVA系列:NIO

NIO学习 一、前言 先来看一下NIO的工作流程图: NIO三大核心组件,channel(通道)、Buffer(缓冲区)、selector(选择器)。NIO利用的是多路复用模型,一个线程处理多个IO的读…

探秘三相交流电子负载应用

三相交流电子负载是模拟实际负载的电子设备,主要用于电源、电机、变压器等产品的性能测试和老化试验。它能够精确控制电流、电压、频率等参数,模拟各种复杂的负载情况,为产品研发和质量控制提供可靠的测试手段。 三相交流电子负载在电源产品测…

4. 排序算法

文章目录 1.简单排序1.1 冒泡排序1.1.1 步骤核心思想1.1.2 参考代码1.1.3 时间复杂度1.1.4 空间复杂度1.1.5 优化 1. 2. 选择排序1.2.1 核心思想1.2.2 步骤1.2.3 参考代码1.2.4 时间复杂度1.2.5 空间复杂度1.2.6 优化 1.3 插入排序1.3.1 思想1.3.2 步骤1.3.3 参考代码1.3.4 时间…

js使用链表实现音乐播放器(新增,下一首播放,置顶,删除)

什么是链表 链表是一种线性数据结构,与数组类似,它用于存储一系列元素。不过,与数组在内存中连续存储元素不同,链表中的元素(称为节点)在内存中可以是非连续存放的。每个节点包含两部分:一部分…

Java开发的saas模式智能制造超强云MES系统源码springboot+mysql+uniapp一整套云MES系统源码

Java开发的saas模式智能制造超强云MES系统源码springbootmysqluniapp一整套云MES系统源码 智能制造超强云MES系统概述: MES以生产车间管理为核心,帮助企业实现生产动态监控和管理。把制造数据管理、计划排程管理、生产调度管理、库存管理、质量管理、人…

swagger-ui页面接口的入参出参与代码实体类不一致有差异、swagger请求实体与预期定义不符、swagger参数与实体中参数不一致原因分析

文章目录 一、问题背景二、问题原因及解决方法 一、问题背景 项目集成swagger之后,发现有个接口的请求跟接口对应不上,把其他接口的请求参数放到当前这个请求上了。 如下图:test1接口的请求参数是其他请求的,并不是test1接口的 …

win10如何查看本机ip地址?三招搞定,快来试试吧

在数字化时代,IP地址作为网络设备的唯一标识,对于计算机使用者来说具有重要意义。无论是为了进行网络设置、远程连接,还是解决网络问题,了解如何查看本机IP地址都是一项必备技能。对于使用Windows 10操作系统的用户来说&#xff0…

简单的 Cython 示例

1&#xff0c; pyx文件 fibonacci.pyx def fibonacci_old(n):if n < 0:return 0elif n 1:return 1else:return fibonacci_old(n-1) fibonacci_old(n-2) 2&#xff0c;setup.py setup.py from setuptools import setup from Cython.Build import cythonizesetup(ext_mod…

node.js(express)+MongoDB快速搭建后端---新手教程

前言&#xff1a; Node.js是一个基于 Chrome V8引擎的JavaScript运行环境&#xff0c;是对于前端工程师来说学习成本最小的后端实现方法&#xff0c;本篇文章总结如何从0-1写一个后端的登录接口 一、检查node环境 先检查自己的node是否安装 一般来说前端工程师的电脑环境肯定…

六面体大米装袋机在提升大米包装效率中的作用

在当今社会&#xff0c;随着科技的飞速发展&#xff0c;各行各业都在寻求创新与突破&#xff0c;以提升生产效率和降低成本。而在大米包装领域&#xff0c;六面体大米装袋机的出现&#xff0c;无疑为整个行业带来了革命性的变化。这种先进的机械设备不仅提高了大米的包装效率&a…

【全开源】沃德校友会管理系统(FastAdmin+ThinkPHP+Uniapp)

一款基于FastAdminThinkPHPUniapp开发的校友会综合服务平台&#xff0c;即校友信息管理平台、活动管理平台、校友服务大厅、校友企业服务平台等&#xff0c;实现集中学校、学院、校友会于一体的基础服务平台的搭建&#xff0c;建设一个满足校友信息化长期发展的、可扩展的综合校…

全面盘点多模态融合算法及应用场景

关注作者&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕博&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c;项目管理专业人士&#xff0c;上亿营收AI产品研发负责人 多…

一款更加轻量级的虚拟机:Multipass

一款更加轻量级的虚拟机&#xff1a;Multipass 前言Multipass概述安装Multipassmultipass命令命令使用说明 Multipass的使用查看镜像列表新建和运行虚拟机查看虚拟机列表查看虚拟机信息进入虚拟机外部操作虚拟机删除和释放实例初始化配置虚拟机的调整设置桥接网络接口配置软件源…

Oracle dblink 发现Network 等待事件的分析 enq: KO - fast object checkpoint

所有的sql 通过dblink 查询全部等待中&#xff0c; 同一个SQL 20多个session 在跑&#xff0c;等待事件network&#xff0c;可能怀疑是不是网络断开了&#xff0c;导致没有返回 执行sql 如下&#xff1a; BEGIN Xdblink ; END; 去到dblink 所在的db&#xff0c;发现20多个sql在…

白酒:白酒产地的地域文化与品牌形象

云仓酒庄豪迈白酒&#xff0c;作为中国白酒的一部分&#xff0c;其品牌形象深受产地的地域文化影响。地域文化是一个地区与众不同的文化传统和价值观&#xff0c;它影响着当地人的生活方式和审美观念&#xff0c;进而影响白酒的品牌形象。 首先&#xff0c;白酒产地的历史与传统…

ClickHouse安装教程:开启你的列式数据库之旅

ClickHouse是一个高性能的列式数据库管理系统&#xff0c;适用于在线分析处理&#xff08;OLAP&#xff09;。以下是ClickHouse的一些基本使用步骤&#xff1a; 下载二进制文件&#xff1a;您可以通过运行以下curl命令在Linux、FreeBSD或macOS上本地下载ClickHouse&#xff1a…

Midjourney如何控制光照?提示词灵感来了!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Midjourney如何控制光照&#xff1f;提示词灵感来了&#xff01;文章目录 前言总结 前言 Midjourney v6 已经更新好久了&#xff0c;你知道有哪些可以控制光照效果的关键词吗…

全志T527 适配双目tp2815_mipi

一、硬件信息 TP2815&#xff1a; 确认硬件信息&#xff1a; 1、通信接口&#xff1a;TWI2总线&#xff0c;引脚组为PE1 、PE2 2、RESET脚&#xff1a; 二、软件配置 1、设备树 t527 dtsi: bsp/configs/linux-5.15/sun55iw3p1.dtsi t527 uboot-board.dts device/config/chi…

重学java 49 增强for

知之俞明&#xff0c;则行之越笃&#xff1b;行之愈笃&#xff0c;则知之愈益&#xff1b; —— 24.5.28 一、基本使用 1.作用: 遍历集合或者数组 2.格式: for(元素类型 变量名:要遍历的集合名或者数组名) 变量名就是代表的每一个元素 3.快捷键: 集合名或者数组名.for package …