哈夫曼树,哈夫曼编码

简介: 哈夫曼树,哈夫曼编码

一、哈夫曼树(最优二叉树)定义:

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

首先搞清楚基本术语:

1、路径和路径长度

在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。

在哈夫曼树中,只需要关注根节点与叶子节点之间的路径即可。


20200828165902293.png

2、结点的权及带权路径长度

若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。

20200828165916835.png


3、树的带权路径长度

树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL(Weighted Path Length of Tree)。

WPL=14+6=20

二、构建哈夫曼树(考点,也是生成哈夫曼编码的基础)

给定这样的场景:给出5个节点,构建一颗带权路径长度最短的树。这里有一个原则:权值越大,则应该距离根节点越接近。这样可以减小WPL(树的带权路径长度)。

20200828165943929.png


注意:兄弟结点的位置跟权的大小没有关系!左右孩子谁大谁小都可以,上图中的权重2,3 的两个节点位置可以互换,根节点下两颗子树也能左右互换。


相关文章
|
7月前
|
算法
哈夫曼树的题
哈夫曼树的题
|
存储 算法
|
6月前
|
机器学习/深度学习 存储
数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)
数据结构学习记录——哈夫曼树(什么是哈夫曼树、哈夫曼树的定义、哈夫曼树的构造、哈夫曼树的特点、哈夫曼编码)
206 1
|
自然语言处理 算法 搜索推荐
哈夫曼树与哈夫曼编码
本文主要介绍实现哈夫曼树和哈夫曼编码
217 1
哈夫曼树与哈夫曼编码
|
存储 算法 搜索推荐
哈夫曼树、哈夫曼编码和字典树
哈夫曼树、哈夫曼编码和字典树
160 0
|
存储
哈夫曼树和哈夫曼编码的简单实现
哈夫曼树和哈夫曼编码的简单实现
118 0
哈夫曼树与哈夫曼编码(优先队列)
哈夫曼树与哈夫曼编码(优先队列)
395 0
哈夫曼树与哈夫曼编码(优先队列)
|
存储 算法
哈夫曼树、哈夫曼编码详解
哈夫曼树、哈夫曼编码很多人可能听过,但是可能并没有认真学习了解,今天这篇就比较详细的讲一下哈夫曼树。
269 0
哈夫曼树、哈夫曼编码详解
|
算法
不妨用数组实现哈夫曼树的生成
不妨用数组实现哈夫曼树的生成
136 0
不妨用数组实现哈夫曼树的生成