惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
Y
Y Combinator Blog
V
V2EX
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog
博客园 - 叶小钗
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
H
Help Net Security
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
B
Blog
G
Google Developers Blog
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
N
Netflix TechBlog - Medium
腾讯CDC

博客园 - 欢乐豆123

踩坑记录 - 数据实体/接口使用Enum类变量 软件设计师考试 - 有限自动机 软件设计师考试 - 排序算法 软件设计师案例题型 - DFD(数据流图) 软件设计师考试 - 二分查找 软件设计师考试 - Gantt图与PERT图(项目管理) 软件设计师考试 - 数据表示(原码、反码、补码、移码) 软件设计师考试 - 上午题型分析 软件设计师考试 - 下午题型分析 软件设计师考试-应用技术 内存溢出问题 常见的算法类型 排序算法的介绍 微信生态梳理 海明码介绍 Elasticsearch 实战:基于 function_score 的搜索与权重排序 Nexus的简单介绍以及如何上传自定义包 设计模式-桥接模式(Bridge Pattern) 设计模式简介 jmeter压测 sdkman-管理多个版本的JDK SpringBoot中使用Aop统一拦截MQ消息处理 项目管理流程以及规范 Java-泛型的使用
哈夫曼树以及哈夫曼编码
欢乐豆123 · 2026-06-16 · via 博客园 - 欢乐豆123

哈夫曼树以及哈夫曼编码 

  一、哈夫曼树

  1. 哈夫曼树的定义

   给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree),哈夫曼树是带权路径长度最短的树。权值较大的结点离根较近。

  说明:哈夫曼树是一种用于哈夫曼编码的工具结构。

  2. 哈夫曼树的构造过程 

  哈夫曼树的构造目标是:使带权路径长度(WPL)最小(贪心策略)

  即:WPL = ∑(叶子节点权值×路径长度)

  构造原则:每次选取当前权值最小的两个节点进行合并,直到只剩一棵树(贪心策略)。

  3. 哈夫曼树的特点 

  1)初始节点都在树的叶子节点上

  2)权值大的节点离根更近

  3)每个非叶子节点都有两个孩子(因为我们自下向上构造,两个孩子构成一个新树的根节点)

  4. 举例:假设有一组权值 5,29,7,8,14,23,3,11,请尝试构造哈夫曼树。

image

  计算权值:5*5+3*5+7*4+14*3+29*2+8*3+11*3+23*2 = 271

  注意:哈夫曼树不一定唯一。当构造过程中出现相同权值的节点时,可以有多种合法的合并顺序,因此可能得到不同的哈夫曼树和哈夫曼编码。但无论构造方式如何,其带权路径长度(WPL)都是最小且相同的。 

  二、哈夫曼编码

  1. 哈夫曼编码的定义

  哈夫曼编码是一种变长前缀编码(Prefix Code),具有无歧义特性;其编码长度与字符频率相关(高频短、低频长),并且在所有前缀编码中具有最优的平均编码长度,是一种高效的无损压缩编码方式。

  2. 编码规则

  在哈夫曼树中:左分支记为 0,右分支记为 1,从根到叶子的路径即为该字符编码。

  3. 举例:设有5个字符,根据其使用频率为其构造哈夫曼编码。以下编码方案中,选项 ( ) 是不可能的。

  A. {111,110,101,100,0}

  B. {0000,0001,001,01,1}

  C. {11,10,01,001,000}

  D. {11,10,011,010,000}

 选项:D000 这个编码上,有一个内部节点只有1个孩子节点,这个就不满足哈夫曼编码)