数据结构--哈夫曼编码

  1. 基本概念

• 路径长度:从树中一个结点到另一个结点的分支数目。

• 树的路径长度:从根结点到树中所有叶结点的路径长度之和。

• 带权路径长度(WPL):设树有 n 个叶结点,每个叶结点带权值 w_i,从根到该叶结点的路径长度为 l_i,则 WPL=\sum_{i=1}^n w_i\times l_i。

• 哈夫曼树(最优二叉树):带权路径长度 最小 的二叉树,叶结点权值越大,离根结点越近。

  1. 哈夫曼树构造算法

  2. 初始化:将 n 个权值对应的结点,各自作为一棵仅含单个结点的二叉树,构成森林 F。

  3. 选择与合并:在 F 中选取 根结点权值最小的两棵二叉树,作为左右子树构造一棵新二叉树,新根结点权值为两棵子树根权值之和。

  4. 更新森林:从 F 中删除选中的两棵树,将新树加入 F。

  5. 重复步骤 2、3:直到 F 中仅含一棵二叉树,该树即为哈夫曼树。

关键特性:

• 初始 n 个叶结点,最终哈夫曼树的结点总数为 2n-1。

• 哈夫曼树中 没有度为 1 的结点。

  1. 哈夫曼编码

• 前缀编码:任意一个编码都不是另一个编码的前缀,保证解码无歧义。

• 哈夫曼编码构造:以字符出现频率为权值构建哈夫曼树,左分支标记 0,右分支标记 1,从根到叶结点的路径上的 0/1 序列,即为该叶结点对应字符的编码。

• 优势:频率高的字符编码短,频率低的字符编码长,实现数据压缩。

  1. 应用场景

• 数据压缩(如 Huffman 压缩算法)

• 通信编码优化

• 决策树模型构建

相关推荐
wabs66644 分钟前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
hanlin031 小时前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode
自不量力的A同学2 小时前
开源一站式智能终端 uniTerm v1.9.4 发布
笔记
91刘仁德2 小时前
C++ 继承和多态 设计模式
c语言·c++·笔记
雨落在了我的手上2 小时前
Java数据结构(十四):Map和Set
数据结构
码行山野赴时序归途3 小时前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表
库玛西3 小时前
哈夫曼树与前缀编码:数据压缩的贪心核心
c语言·c++·笔记·考研
船厂电气自动化ai大模型5 小时前
AI大模型与数学|第81天 课程:正交向量、正交基、格拉姆‑施密特(Gram‑Schmidt)正交化
开发语言·数据结构·人工智能·线性代数·机器学习
Rabitebla5 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
库玛西5 小时前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法