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

推荐订阅源

GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
F
Fortinet All Blogs
A
About on SuperTechFans
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
P
Proofpoint News Feed
D
Docker
Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
I
InfoQ
Recorded Future
Recorded Future
爱范儿
爱范儿
Last Week in AI
Last Week in AI
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
L
LINUX DO - 热门话题
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CXSECURITY Database RSS Feed - CXSecurity.com
L
Lohrmann on Cybersecurity
The Last Watchdog
The Last Watchdog
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Privacy International News Feed
博客园 - 三生石上(FineUI控件)
Schneier on Security
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
Martin Fowler
Martin Fowler
雷峰网
雷峰网
Latest news
Latest news
Scott Helme
Scott Helme
T
Tenable Blog
Vercel News
Vercel News
宝玉的分享
宝玉的分享
PCI Perspectives
PCI Perspectives
Help Net Security
Help Net Security
L
LINUX DO - 最新话题
Attack and Defense Labs
Attack and Defense Labs
Spread Privacy
Spread Privacy
量子位
H
Heimdal Security Blog

博客园 - 欢乐豆123

软件设计师考试 - 有限自动机 软件设计师考试 - 排序算法 软件设计师案例题型 - 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个孩子节点,这个就不满足哈夫曼编码)