5.14.哈夫曼树

embedded/2025/2/12 13:03:28/


一.带权路径长度:

1.如结点3,从树的根到该结点的路径长度为3,该结点的权值为3,因此结点3的带权路径长度为3 * 3=9;

2.求树的带权路径长度举例:


二.哈夫曼树的构造:

1.结点下面的1,2,3,7是对应的权值;

2.关键:把权值最小的结点作为兄弟,之后依次把权值小的结点优先结合;

3.如果有n个结点,最终需要结合n-1次,得出哈夫曼树,因为结点是两两结合;

4.求出的哈夫曼树,如果由n个结点求出,那么哈夫曼树就有2n-1个结点:

一开始由两个结点组合,多出一个结点,此时有3个结点,剩n-2个结点开始组合,然后每一个结点组合就多出一个结

点,此时就有(n-2) * 2=2n-4个结点,共有2n-4+3=2n-1个结点;

5.哈夫曼树并不唯一,但WPL必然相同且为最优,如上述图片的结点还可以组合为以下的情况:


三.哈夫曼编码:

1.如电报--点信号对应二进制的0,划信号对应二进制的1;

2.构造结点A,B,C,D的哈夫曼树:

3.上述图片中A的频率相对比较高,可把A的编码改为1(此时A就不在叶子结点了),但会有bug,

比如发送CAAABD,那么对应的编码为0 1 1 1 111 110,

但在解读的时候可能解读为0 111 111 110即CBBD,收到的结果与发送的就有差别;

4.对于一个字符集,要设计一个可变长度编码的话,字符集中的所有字符对应到结点中必须是叶子结点;

5.若没有一个编码是另一个编码的前缀,则称这样的编码为前缀编码,如1和111就不是前缀编码,1是111的前缀;

00和111是前缀编码,00不是111的前缀:

6.哈夫曼编码就是用构造哈夫曼树来确定的一种字符集的编码方案;

7.哈夫曼编码方案不唯一:


四.总结:



http://www.ppmy.cn/embedded/161599.html

相关文章

【前端】【面试】ref与reactive的区别

ref 与 reactive 的区别笔记 一、概述 在 Vue 3 的组合式 API 中,ref 和 reactive 是两个非常重要的响应式工具,它们都用于创建响应式数据,但在使用方式、适用场景和内部实现上存在一些区别。 二、基本使用方式 1. ref ref 用于创建一个…

Redis 集群工作原理? 如何通信?MOVED和ASKED 有什么区别

目录 Redis 集群工作原理 1. 数据分片 2. 节点角色 3. 自动故障转移 Redis 集群通信方式 1. Gossip 协议 2. TCP 通信 MOVED 和 ASK 错误的区别 1. MOVED 错误 2. ASK 错误 Redis 集群工作原理 1. 数据分片 Redis 集群采用哈希槽(Hash Slot)来实现数据的分片存储…

从词袋到Transformer:自然语言处理的演进与实战

自然语言处理(NLP)是人工智能领域中最具挑战性和吸引力的方向之一。从最早的规则系统到如今的深度学习模型,NLP技术的发展历程充满了创新与突破。本文将带你深入探讨NLP的核心技术演进,并通过代码和案例展示如何从简单的词袋模型过渡到强大的Transformer架构。 1. 词袋模型…

浅谈Deepseek MoE

文章目录 Deepseek MoE1. MoE的定义1.1 什么是MoE(Mixture of Experts)?1.2 传统MoE的架构1.2.1 专家网络(Experts)1.2.2 门控网络(Gating Network) 1.3 传统MoE的工作流程1.4 传统MoE的特点1.5…

Linux内核实时机制x - 实时性之中断响应优化

Linux内核实时机制x - 实时性之中断响应优化 在基于PREEMPT_RT的Linux实时系统,社区开发了一套测试工具集rt-test,用于测试实时系统的各种指标。 其中重点关注的指标有: 中断响应时间 Cyclitest信号混洗时间 sigwaittest死锁解除时间 ptsem…

matlab基础

文章目录 数据类型符号表向量、矩阵操作多项式单元数组结构型变量 数据类型 常量: 1. pi #圆周率 2. inf #无穷大 3. NaN #无效值 变量: 1. char #字符型数据,属于整型数据的一种,占用1 个字节。 2. unsigned char #无符…

在 Flutter 实现下拉刷新、上拉加载更多和一键点击回到顶部的功能

在 Flutter 中,实现下拉刷新、上拉加载更多和一键点击回到顶部的功能,通常会结合使用 RefreshIndicator、ListView 和 ScrollController 来实现这些交互效果。下面分别介绍如何实现这些功能。 1. 下拉刷新 Flutter 提供了 RefreshIndicator 组件来实现…

利用maven搭建完web环境后,如何在pom.xml中编写servlet依赖范围配置

步骤一:打开Maven的中央仓库:https://mvnrepository.com/ 步骤二:在搜索框,搜索“Servlet” 步骤三:选择合适的版本,点击跳转到相应页面 这里举例3.1.0版本,一般这个版本与tomcat8匹配。 步骤…