第五章 05哈夫曼树(王道)

一、知识总览

第五章 05哈夫曼树(王道)

1.哈夫曼树是二叉树的一种,主要用于数据压缩和编码。

2.构造哈夫曼树的关键是选择权值最小的节点进行合并。

3.哈夫曼树的应用包括哈夫曼编码,用于优化数据传输的效率。

二、带权路径长度

第五章 05哈夫曼树(王道)

三、哈夫曼树的定义

第五章 05哈夫曼树(王道)
  • 哈夫曼树定义:带权路径长度最小的二叉树
  • 别名:最优二叉树
  • 构造条件:给定n个带权叶子节点
  • 比较范围:所有含这n个叶子节点的二叉树
  • 核心特征:最小化带权路径长度

四、哈夫曼树的构造

第五章 05哈夫曼树(王道)
  • 哈夫曼树构造方法:每次选择两个权值最小的节点结合成兄弟节点。
  • 新树权值计算:新生成的树的根节点权值为两个子节点权值之和。
  • 带权路径长度(WPL):哈夫曼树的WPL是所有叶子节点的权值乘以其到根节点路径长度之和。
  • 构造步骤:重复选择最小权值节点结合,直到只剩一棵树。
  • 最优性:哈夫曼树的WPL是所有可能树中最小的。
  • 节点选择:构造过程中可选择任意两个最小权值节点,顺序不影响最终结果。
第五章 05哈夫曼树(王道)

五、哈夫曼编码

第五章 05哈夫曼树(王道)
第五章 05哈夫曼树(王道)

第五章 05哈夫曼树(王道)
第五章 05哈夫曼树(王道)

1.哈夫曼编码基于哈夫曼树的原理,用于优化数据传输的效率。 2.哈夫曼编码采用可变长度编码,根据字符出现的频率分配不同的二进制码长。 3.前缀编码:任何字符的编码都不是另一个编码的前缀,避免解码歧义。 4.哈夫曼编码适用于英文等文本数据的压缩,可以显著减少数据传输量。

六、哈夫曼树的应用

第五章 05哈夫曼树(王道)

七、知识回顾

第五章 05哈夫曼树(王道)

重要概念:

  1. 节点权值
    为树中每个节点附上一个数值,称为权值,表示节点的某种现实含义,如重要性等。
  2. 节点的带权路径长度
    从根节点到指定节点的路径长度(经过的边数)与该节点权值的乘积。
    例如:某节点权值为3,从根节点到该节点的路径长度为3,则其带权路径长度为 3 × 3 = 9。
  3. 树的带权路径长度(WPL)
    树的带权路径长度是所有叶子节点的带权路径长度之和,记为 WPL。
    示例:
    • 树1:4个叶子节点,路径长度均为2,权值分别为a、b、c、d,WPL = 2a + 2b + 2c + 2d。
    • 树2:叶子节点权值为5(路径长度1)、4(路径长度2)、1和3(路径长度3),WPL = 1×5 + 2×4 + 3×1 + 3×3 = 25。

哈夫曼树的定义:
哈夫曼树(最优二叉树):给定n个带权叶子节点,在所有包含这n个叶子节点的二叉树中,WPL最小的二叉树。
示例:对于权值为1、3、4、5的4个叶子节点,WPL最小值为25的树即为哈夫曼树,可能有多种形态。


哈夫曼树的构造:
构造步骤:

  1. 从节点集合中选择权值最小的两个节点,将其作为兄弟节点,生成新树,新树的根节点权值为两者之和。
  2. 将新树加入集合,移除原两个节点。
  3. 重复上述步骤,直到集合中只剩一棵树。

示例:权值为1、2、3、7的节点:

初始集合:{a:1, b:2, c:3, d:7}
1. 选择a(1)和c(3),生成新树,根权值为1+3=4,集合更新为{b:2, e:4, d:7}
2. 选择b(2)和e(4),生成新树,根权值为2+4=6,集合更新为{f:6, d:7}
3. 选择f(6)和d(7),生成最终树,根权值为6+7=13

最终WPL为31,验证为最小值。

哈夫曼树的性质:

  1. 初始节点均为叶子节点,权值越小的节点路径长度越长。
  2. n个节点需合并n-1次,总节点数为2n-1。
  3. 不存在度为1的节点。
  4. 哈夫曼树不唯一,但WPL相同且最优。

哈夫曼编码:
应用场景: 数据压缩,如电报传输(点.和划-对应二进制0和1)。
构造方法:

  1. 将字符集中的字符作为叶子节点,字符出现频率作为权值,构造哈夫曼树。
  2. 从根节点出发,左路径为0,右路径为1,生成各字符的编码。

示例:字符集{a:10, b:8, c:80, d:2}(100个选择题答案,c占80次):

1. 选择d(2)和b(8),生成新树,根权值为10
2. 选择新树(10)和a(10),生成新树,根权值为20
3. 选择新树(20)和c(80),生成最终树

编码结果:

c: 0 (80次,80×1)
a: 10 (10次,10×2)
b: 110 (8次,8×3)
d: 111 (2次,2×3)
WPL = 80×1 + 10×2 + 8×3 + 2×3 = 130

总传输比特数为130,远少于固定长度编码(如ASCII的800比特)。

前缀编码:
哈夫曼编码是前缀编码,即任一字符的编码不是另一字符编码的前缀,避免解码歧义。
反例:若a编码为1,b为111,解码“111”可能误为“a”或“b”,导致错误。

特点:

  • 可变长度编码:频率高的字符编码短,频率低的编码长。
  • 不唯一:不同哈夫曼树生成不同编码,但总比特数(WPL)相同。
  • 应用:数据压缩,如英文26字母按频率编码可显著减少数据量。

总结:

  • 核心概念:树的带权路径长度(WPL)。
  • 哈夫曼树:包含n个带权叶子节点且WPL最小的二叉树。
  • 构造方法:每次合并权值最小的两棵树,合并n-1次。
  • 应用:哈夫曼编码,用于数据压缩,确保前缀编码无歧义。

本网站原创文章版权归何大锤的狂飙日记所有。发布者:何大锤,转转请注明出处:何大锤的博客

(0)
何大锤的头像何大锤管理团队

相关推荐

  • 第五章 06并查集(王道)

    一、知识总览 二、如何表示集合关系 2.1 逻辑结构—集合 本质特征: 并查集本质上是表示集合类型的逻辑结构,数据元素之间呈现集合关系 数学概念: 集合在数学中很常用,如一个班所有同学构成集合S,元素a,b,c,d等代表各个同学 2.2 如何表示集合的逻辑关系? 子集划分: 可按不同维度将全集划分为若干互不相交的子集,如按水果喜好分类 元素关系: 任意两元素…

    2025年7月8日
    600
  • 第五章 04树&森林(王道)

    一、树的存储结构 1.1 树的逻辑结构 与二叉树的区别: 普通树对分支节点的子树数量无限制,而二叉树最多只能有两棵子树 1.2 二叉树的顺序存储 实现方式: 按完全二叉树结点顺序编号并存储在数组中 1.3 如何实现树的顺序结 核心问题: 普通树无法像二叉树那样通过数组下标反映逻辑关系 1.4 双亲表示法 如何实现树的顺序存储? 解决思路: 利用每个非根结点有…

    2025年7月7日
    500
  • 第五章 03线索二叉树(王道)

    一、线索二叉树的概念 1.1 普通二叉树的局限性 为什么要有线序二叉树? 需要频繁的访问前驱和后继 1.2 中序线索二叉树 1.3 线索二叉树的存储结构 1.4 中序线索二叉树的存储结构 1.5 先序线索二叉树 1.6 后序线索二叉树 1.7 三种线索二叉树的对比 1.8 知识回顾与重要考点 二、二叉树的线索化 2.1 普通二叉树中序前驱的代码实现 2.2 …

    2025年6月29日
    600
  • 第五章 02二叉树(王道)

    一、二叉树的基本概念 1.1 二叉树的基本概念知识总览 1.2 二叉树的基本概念 1.3 二叉树的五种状态 1.4 几种特殊的二叉树 – 满二叉树 编号规律有助于用顺序存储的方式来存储结点 1.5 几种特殊的二叉树 – 完全二叉树 满二叉树肯定是完全二叉树 但是完全二叉树未必是满二叉树 1.6 几种特殊的二叉树 – 二叉排…

    2025年6月28日
    200
  • 第五章 01树(王道)

    一、知识总览 二、树的定义和基本术语 2.1 树的基本概念 两种形态:空树、非空树 前驱后继:根结点无前驱,叶子结点无后继;分支结点=非终端结点,叶子结点=终端结点 唯一前驱:除根结点外,每个结点有且仅有一个前驱(多前驱则变为图结构) 树是一种递归定义的数据结构 子树特性:子树本身也是树,且各子树必须互不相交(对应唯一前驱约束) 2.2 树形逻辑结构的应用 …

    2025年6月23日
    200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

2211932694

在线咨询: QQ交谈

邮件:hdcblog1999@163.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
网站建设中ing......