news 2026/10/27 18:59:37

信息论|哈夫曼编码构造详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
信息论|哈夫曼编码构造详解

目录

一、为什么需要哈夫曼编码

二、哈夫曼编码核心构造步骤

三、典型例题

四、哈夫曼编码特点

五、考点


前言

学完信息熵之后,紧接着最重要的考点就是无失真信源编码,而哈夫曼编码是考试出现频率最高的最优前缀码,经常出计算题。很多同学背完步骤,一拿到题目就容易踩坑:选符号、合并节点、码长分配、计算编码效率,稍有不慎就整道题失分。

本文从编码思想、构造步骤,搭配一道完整例题一步步演算,理清哈夫曼编码的做题套路。


一、为什么需要哈夫曼编码


信源各个符号发生的概率不一样,我们自然会想到:
概率大的符号,分配更短的码字;概率小的符号,分配更长的码字,这样整体平均码长就能尽可能变小,压缩数据,也就是实现无损压缩。

哈夫曼编码就是按照这个思路设计出来的最优前缀编码。

前缀码:任意一个码字,都不能是另一个码字的前缀,解码的时候不会出现歧义,不需要分隔符。


二、哈夫曼编码核心构造步骤


1. 将信源符号按照概率从小到大排序

2. 选取两个概率最小的节点,合并,两个概率相加,得到新节点

3. 给这两个分支分配码字,一般习惯:小概率标记1,大概率标记0(或者反过来,只要全程统一即可,最后结果形式不同,但平均码长不变)

4. 把合并后的新概率放回集合,重新排序,重复上面合并操作

5. 不断迭代,直到最后只剩下一个节点,概率总和等于1

6. 从根节点反向回溯,读出每个原始符号对应的码字

⚠️ 考试易错提醒:

- 每次合并之后一定要重新排序,不要沿用上次顺序

- 当出现概率相同节点时,不同选择会得到不同哈夫曼码,都算正确,但是平均码长一样


三、典型例题


题目:离散无记忆信源


对该信源进行二元哈夫曼编码,求各符号码字、平均码长、编码效率

步骤推演

1. 初始排序:0.1,0.2,0.3,0.4

2. 合并最小两个:0.1 + 0.2 = 0.3
新集合:0.3,0.3,0.4

3. 继续合并最小两个:0.3 + 0.3 = 0.6
新集合:0.4,0.6

4. 最后合并:0.4 + 0.6 = 1

分配码字(示例)
x_1(0.4):0
x_2(0.3):10
x_3(0.2):110
x_4(0.1):111

计算

平均码长


信源熵:


编码效率


四、哈夫曼编码特点


✅ 优点

1. 二元哈夫曼是最优前缀码,相同条件下平均码长最短

2. 属于无损编码,解码可以完全还原原始符号,不会丢失信息

3. 在文件压缩领域广泛应用,早期很多压缩算法底层都用到哈夫曼思想

❌ 局限性

1. 每个符号都需要事先统计概率,需要先扫描整个信源得到概率分布

2. 当信源符号概率接近均匀分布时,压缩效果很差

3. 不同合并方式得到的码字不唯一


五、考点


1. 哈夫曼编码是不是唯一编码?

答:码字不唯一,但平均码长相同,都是最优编码

2. 哈夫曼编码一定能实现无失真编码吗?

只要是前缀码,就可以唯一解码,实现无失真信源编码

结语

哈夫曼编码属于无失真信源编码最经典代表。它完美践行香农无失真编码定理:平均码长可以无限接近信源熵。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 18:59:28

Vibe Coding 工作流实践:从意图定义、代码生成到生产级质量管控

Vibe Coding 工作流实践:从意图定义、代码生成到生产级质量管控 Vibe Coding(氛围编程)由 Andrej Karpathy 在 2025 年初提出,两年间从一个圈内玩笑变成了席卷整个软件行业的开发范式。它的核心逻辑一句话就能说清:人类…

作者头像 李华
网站建设 2026/10/27 18:59:07

实验报告:基于Wireshark的QQ流量特征分析

一、 实验背景与目的 随着即时通讯软件的普及,用户隐私安全日益受到关注。本次实验旨在通过 Wireshark 抓包工具,对 PC 端及手机端 QQ 的通信流量进行捕获与分析。主要验证 QQ 通信所使用的传输层协议(TCP/UDP)、数据是否加密&…

作者头像 李华
网站建设 2026/10/27 18:56:24

微信小程序: scroll-view组件——纵向滚动、横向滚动与滚动事件

一、前言页面内容超出屏幕是常态,scroll-view 就是小程序提供的"可滚动容器":给它一个固定的高度(或宽度),加上 scroll-y 或 scroll-x,容器内部就能独立于页面滚动。它比页面级滚动更可控——可以…

作者头像 李华
网站建设 2026/10/27 18:56:20

AI Agent技能生态系统:架构设计与实践演进

1. 项目概述:AI Agent技能生态系统的演进路径在AI技术从实验室走向产业落地的过程中,我们正经历着从"设计优先"到"实践优先"的范式转变。三年前,大多数AI系统还停留在精心设计的封闭场景中,而今天像AutoGPT这…

作者头像 李华