Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >4.5.3 哈弗曼树(Huffman)树和哈弗曼编码

4.5.3 哈弗曼树(Huffman)树和哈弗曼编码

作者头像
week
发布于 2018-08-24 08:45:29
发布于 2018-08-24 08:45:29
5140
举报
文章被收录于专栏:用户画像用户画像

1.哈夫曼树的定义

树中结点被赋予一个表示某种意义的数值,称为该结点的权。从树根结点到任意结点的路径长度(经过的边数)与该结点上权值的乘积称为该结点的带权路径长度。树中所有叶结点的带权路径长度之和称为该树的带权路径长度,记为

WPL=连加Wi*Li

式中,Wi是第i个叶结点所带的权值;Ii是该叶结点到根结点的路径长度。

在含有N个带权叶子结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈弗曼树,也称为最优二叉树。

2.哈夫曼树的构造

给定N个权值分别是w1,W2,……,Wn的结点

1)将这N个结点分别分为N棵含一个结点的二叉树,构成森林F.

2)构成一个新结点,并从F中选取两个根结点权值最小的树作为新结点左、右子树,并且将新结点的权值置成左、右子树上根结点的权值之和。

3)从F中删除刚才选出的两棵树,同时将得到的树加入F中。

4)重复步骤2)和3),直到F中只剩下一棵树为止。

哈夫曼树具有如下特点:

1)每个初始结点最终都成叶结点,并且权值最小的结点到根结点的路径长度越大。

2)构造过程中共新建了N-1个结点(双分支结点),因此哈夫曼树中结点总数为2N-1。

3)每次构造都选择2棵树作为新结点的孩子,因此哈夫曼树中不存在度为1的结点。

3.哈夫曼编码

对于待处理的一个字符串序列,如果对每个字符采用同样长度的二进制来表示,则称这种编码方式为固定长度编码。

如果对不同字符采用不等长的二进制来表示,则称这种编码方式为可变长度编码。

如果没有一个编码是另一个编码的前缀,则称这样的编码为前缀编码。如0、101和100是前缀编码。

解码过程:因为没有一个码是其他码的前缀,所以,可以识别出第一个编码,将它翻译为源码,再对余下的编码文件重复同样的解码操作。如00101100可被唯一地解析为0、0、101和100。

由哈夫曼树得到哈夫曼编码是一个很自然的过程,首先,将每个出现的字符当做一个独立的结点,其权值为它出现的频度(或次数),构造出对应的哈夫曼树。显然所有字符结点都出现在叶子结点。我们可以将字符的编码解释为从根至该路径上边标记的序列,其中边标记为0表示“转向左孩子”,标记为1表示“转向右孩子”。

WPL可以看成是最终编码得到二进制编码的长度。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年09月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【数据结构】哈曼夫树与哈夫曼编码
在上一篇内容中我们介绍了树与森林的遍历,并且我们还通过C语言实现了树与森林的遍历。
蒙奇D索隆
2025/03/20
1810
【数据结构】哈曼夫树与哈夫曼编码
哈夫曼树的详细讲解(手把手教学)
哈夫曼树又称为最优树,是一类带权路径长度最短的树,应用光泛。 在学习哈夫曼树的时候,我们来先引入路径和路径长度的概念。 ***1.1路径:***从树中的一个结点到另一个结点的之间的分支构成的。 ***1.2路径长度:***路径上的分支数目。 ***1.3树的路径长度:***从树根到每一个结点的路径长度之和 结点的带权路径长度:从该结点到树根之间的路径长度与结点上的权值的乘积 ***1.4树的带权路径长度:***树中所有叶子结点的·带权路径长度之和,也就是WPL,WPL=每一个结点的对应的权值乘以对应的路径长度之和。 注意: 1.满二叉树不一定是哈夫曼树 2.哈夫曼树中权值越大的叶子结点离根越近 3.具有相同带权结点的哈夫曼树不惟一 4.在结点相同的二叉树中,完全二叉树是路径长度最短的二叉树。
洁洁
2023/10/10
8460
哈夫曼树的详细讲解(手把手教学)
原以为哈夫曼树、哈夫曼编码很难,结果……
哈夫曼树、哈夫曼编码很多人可能听过,但是可能并没有认真学习了解,今天这篇就比较详细的讲一下哈夫曼树。
main方法
2021/07/19
6800
原以为哈夫曼树、哈夫曼编码很难,结果……
哈夫曼树(最优二叉树)的概念以及构造
在实际生活和生产应用中,我们往往会遇到综合比较一系列的离散量的问题;比如说车站根据包裹的重量以及旅途的长短来确定携带行李的价格,或者我们根据一定的重量范围来给一箱铁球进行分类。这一类问题的解决思路是: 1、 根据实际需要划分出分类的标准; 2、 按一定的顺序(算法)将实际的数据归到相应的类别里。 一般情况下,我们所确定的分类标准并不能保证每一类的数据量是平均分配的;也就是说,由于每一类数据出现的概率不同,造成当采用不同的算法时所需的运算次数的不同。当然,在实际生产生活中,我们更希望得到一种最快,最简洁同时也不会产生歧义的算法。在这个背景下,哈夫曼树以及哈夫曼算法应运而生。
SingYi
2022/07/13
7940
C++ 漫谈哈夫曼树
则称符合上述条件的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。
一枚大果壳
2022/08/23
6710
C++ 漫谈哈夫曼树
【算法】赫夫曼树(Huffman)的构建和应用(编码、译码)
参考资料 《算法(java)》                           — — Robert Sedgewick, Kevin Wayne 《数据结构》                                  — — 严蔚敏 赫夫曼树的概念 要了解赫夫曼树,我们要首先从扩充二叉树说起 二叉树结点的度 结点的度指的是二叉树结点的分支数目, 如果某个结点没有孩子结点,即没有分支,那么它的度是0;如果有一个孩子结点, 那么它的度数是1;如果既有左孩子也有右孩子, 那么这个结点的度是2. 扩充
啦啦啦321
2018/03/30
2K0
【算法】赫夫曼树(Huffman)的构建和应用(编码、译码)
数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 数据结构图文解析之:树的简介及二叉排序树C++模板实现. 数据结构图文解析之:AVL树详解及C++模板实现 数据结构图文解析之:二叉堆详解及C++模板实现 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现 1. 哈夫曼编码简
Tencent JCoder
2018/07/02
1.1K0
【数据结构】建立二叉树以及哈夫曼树及哈夫曼编码
文章目录 5.4.1 方式 5.4.2 由先根和中根遍历序列建二叉树 5.4.3 由后根和中根遍历序列建二叉树 5.4.4 由标明空子树的先根遍历建立二叉树 5.4.5 由完全二叉树的顺序存储结构建立二叉链式存储结构 5.5 哈夫曼树及哈夫曼编码 5.5.1 基本概念 5.5.2 最优二叉树 5.5.3 构建哈夫曼树 5.5.4 哈夫曼编码 5.5.5 哈夫曼编码类 5.4.1 方式 四种方式可以建立二叉树 由先根和中根遍历序列建二叉树 由后根和中根遍历序列建二叉树 由标明空子树的先根遍
陶然同学
2023/02/26
1.1K0
【数据结构】建立二叉树以及哈夫曼树及哈夫曼编码
哈夫曼树与哈夫曼编码:聪明的数据压缩技术
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2023/11/14
1.2K1
哈夫曼树与哈夫曼编码:聪明的数据压缩技术
哈夫曼树
哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径
Java架构师必看
2021/12/27
7270
《大话数据结构》树以及赫夫曼编码的例子
第六章 树 6.2 树的定义 树(Tree)的n个结点的有限集。当n=0时,称为空树。 任意一个非空树中: 1)有且仅有一个特定的称为根(root)的结点 2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2 …… 、Tm。其中每个集合本身又是一棵树,并且称为根的子树(SubTree)。 注意: 1)n>0时根节点的唯一的,不可能存在多个根节点。 2)m>0时,字数的个数没有限制,但是它们一定是互不相交的。 6.2.1 结点分类 结点拥有的子树个数称为结点的度(Degree)。 度为0的结
xcywt
2018/03/28
1K0
《大话数据结构》树以及赫夫曼编码的例子
带权树 -- 哈夫曼树,与它的那张哈夫曼编码表
现在假设a处于0~60的概率为0.1 60~70:0.3 70~80:0.4 80~90:0.15 大于90:0.05
看、未来
2020/08/26
1.2K0
带权树 -- 哈夫曼树,与它的那张哈夫曼编码表
6.6 赫夫曼树及其应用
1、从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上的分支数目称做路径长度。
小林C语言
2020/12/12
3450
6.6 赫夫曼树及其应用
最优二叉树—哈夫曼(huffman)树
ASL=(1+2*2+3)/4=2            ASL=(1+2+3+4)/4=2.5
一条晒干的咸鱼
2024/11/19
3170
最优二叉树—哈夫曼(huffman)树
哈夫曼树(赫夫曼树、最优树)详解
路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径。图 1 中,从根结点到结点 a 之间的通路就是一条路径。 路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。例如在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度为 i - 1 。图 1 中从根结点到结点 c 的路径长度为 3。 结点的权:给每一个结点赋予一个新的数值,被称为这个结点的权。例如,图 1 中结点 a 的权为 7,结点 b 的权为 5。 结点的带权路径长度:指的是从根结点到该结点之间的路径长度与该结点的权的乘积。例如,图 1 中结点 b 的带权路径长度为 2 * 5 = 10 。 树的带权路径长度为树中所有叶子结点的带权路径长度之和。通常记作 “WPL” 。例如图 1 中所示的这颗树的带权路径长度为:
zhangjiqun
2024/12/14
3K0
哈夫曼树(赫夫曼树、最优树)详解
数据结构——HuffmanTree
Huffman tree 基本术语 路径和路径长度 - 路径:在一棵树中,从一个结点往下可以达到的孩子或子孙结点之间的通路。 - 结点的路径长度:从一个结点到另一个结点的路径上分支的数目。 结点的权及带权路径长度 - 结点的权:将树中结点赋予一个有着某种含义的数值。 - 结点的带权路径长度:从根结点到该结点之间的路径长度与该结点的权的乘积。 树的带权路径长度 - 树中所有叶子结点的带权路径长度之和。 赫夫曼树( Huffman tree ) - 带权路径长度达到最小的二叉树即为赫夫曼
ruochen
2021/06/29
2490
数据结构——HuffmanTree
哈夫曼树 编码-【数据结构】树形结构——哈夫曼编码
  在电报业务和数字通信中,可以用0和1组成的编码表示一个字母或其他字符,用编码序列表示字符序列以进行远距离传送。长途通信的代价是比较高的,希望用尽可能短的编码序列长度来传递给定的信息量,以提高通信的效率和降低传输的成本。
宜轩
2022/12/29
6470
数据结构 Huffman树
Huffman 介绍 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点
Kindear
2017/12/29
1.5K0
数据结构 Huffman树
数据结构与算法 -判定树和哈夫曼树
判定树是用于描述分类过程的二叉 树,每个非终端结点包含一个条件,对应一次比较;每个终端结点 包含一个种类标记, 对应于一种分类结果。
越陌度阡
2020/11/26
1.4K0
数据结构与算法 -判定树和哈夫曼树
产品能力|算法基础-哈夫曼树14天阅读挑战赛
趣味算法(第二版)读书笔记: day1: 序章|学习的方法和目标. day2:算法之美|打开算法之门与算法复杂性 day3.算法之美|指数型函数对算法的影响实际应用 day4.数学之美|斐波那契数列与黄金分割 day5.算法基础|贪心算法基础 day6.算法基础||哈夫曼树 day7.算法基础||堆栈和队列
破晓之翼
2022/11/18
4190
产品能力|算法基础-哈夫曼树14天阅读挑战赛
推荐阅读
相关推荐
【数据结构】哈曼夫树与哈夫曼编码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档