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

哈夫曼编码的理解(Huffman Coding)

作者头像
233333
发布于 2020-02-12 15:42:12
发布于 2020-02-12 15:42:12
5.6K0
举报

哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。

哈夫曼编码,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。

简易的理解就是,假如我有A,B,C,D,E五个字符,出现的频率(即权值)分别为5,4,3,2,1,那么我们第一步先取两个最小权值作为左右子树构造一个新树,即取1,2构成新树,其结点为1+2=3,如图:

虚线为新生成的结点,第二步再把新生成的权值为3的结点放到剩下的集合中,所以集合变成{5,4,3,3},再根据第二步,取最小的两个权值构成新树,如图:

再依次建立哈夫曼树,如下图:

其中各个权值替换对应的字符即为下图:

所以各字符对应的编码为:A->11,B->10,C->00,D->011,E->010

霍夫曼编码是一种无前缀编码。解码时不会混淆。其主要应用在数据压缩,加密解密等场合。

如果考虑到进一步节省存储空间,就应该将出现概率大(占比多)的字符用尽量少的0-1进行编码,也就是更靠近根(节点少),这也就是最优二叉树-哈夫曼树。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
原以为哈夫曼树、哈夫曼编码很难,结果……
哈夫曼树、哈夫曼编码很多人可能听过,但是可能并没有认真学习了解,今天这篇就比较详细的讲一下哈夫曼树。
main方法
2021/07/19
6770
原以为哈夫曼树、哈夫曼编码很难,结果……
视频压缩编码技术(H.264) 之哈夫曼编码
第二步,将两个最小概率组成一组,划成2 个分支域,并标以0 和1;再把2 个分支域合并成1个支域,标以两个概率之和;
瓜大三哥
2018/08/17
1.1K0
视频压缩编码技术(H.264) 之哈夫曼编码
香农编码,哈夫曼编码与费诺编码的比较[通俗易懂]
概念: 香农编码是是采用信源符号的累计概率分布函数来分配字码的。香农编码是根据香农第一定理直接得出的,指出了平均码长与信息之间的关系,同时也指出了可以通过编码使平均码长达到极限值。香农第一定理是将原始信源符号转化为新的码符号,使码符号尽量服从等概分布,从而每个码符号所携带的信息量达到最大,进而可以用尽量少的码符号传输信源信息。
全栈程序员站长
2022/11/04
6.7K0
香农编码,哈夫曼编码与费诺编码的比较[通俗易懂]
经典算法之最优二叉树
我想学过数据结构的小伙伴一定都认识哈夫曼,这位大神发明了大名鼎鼎的“最优二叉树”,为了纪念他呢,我们称之为“哈夫曼树”。哈夫曼树可以用于哈夫曼编码,编码的话学问可就大了,比如用于压缩,用于密码学等。今天一起来看看哈夫曼树到底是什么东东。
用户3467126
2019/11/27
1.4K0
图解霍夫曼编码,教不会我吃一包辣条
今天来给大家普及一下霍夫曼编码(Huffman Coding),一种用于无损数据压缩的熵编码算法,由美国计算机科学家大卫·霍夫曼在 1952 年提出——这么专业的解释,不用问,来自维基百科了。
沉默王二
2021/03/16
1.1K0
数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 数据结构图文解析之:树的简介及二叉排序树C++模板实现. 数据结构图文解析之:AVL树详解及C++模板实现 数据结构图文解析之:二叉堆详解及C++模板实现 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现 1. 哈夫曼编码简
Tencent JCoder
2018/07/02
1.1K0
算法:哈夫曼编码(Huffman Coding)
假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:
WEBJ2EE
2019/07/19
2.7K0
算法:哈夫曼编码(Huffman Coding)
哈夫曼树与哈夫曼编码:聪明的数据压缩技术
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2023/11/14
1.1K1
哈夫曼树与哈夫曼编码:聪明的数据压缩技术
数据结构之哈夫曼编码
例题: 假设一个文本文件TFile中只包含7个字符{A,B,C,D,E,F,G},这7个字符在文本中出现的次数为{5,24,7,17,34,5,13} 利用哈夫曼树可以为文件TFile构造出符合前缀编码要求的不等长编码。 具体做法: 1. 将TFile中7个字符都作为叶子结点,每个字符出现次数作为该叶子结点的权值 2. 规定哈夫曼树中所有左分支表示字符0,所有右分支表示字符1,将依次从根结点到每个叶子结点所经过的分支的二进制位的序列作为该      结点对应的字符编码 3. 由于从根结点到任何一个叶子结点都
互联网金融打杂
2018/04/03
1.3K0
数据结构之哈夫曼编码
漫画:“哈夫曼编码” 是什么鬼?
在上一期,我们介绍了一种特殊的数据结构 “哈夫曼树”,也被称为最优二叉树。没看过的小伙伴可以点击下方链接:
小灰
2020/04/22
89519
数据结构实验哈夫曼编码算法的实现_哈夫曼编码算法的实现
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,
全栈程序员站长
2022/09/23
6790
数据结构实验哈夫曼编码算法的实现_哈夫曼编码算法的实现
当Kotlin遇见数据结构丨哈夫曼编码
哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。
码脑
2019/04/11
5090
当Kotlin遇见数据结构丨哈夫曼编码
哈夫曼编码
1.哈夫曼编码是一种可以被唯一解读的二进制编码 2.前缀编码保证了解码时不会有多种可能 3.哈夫曼编码有不等长和等长两种编码,为了保证不等长编码的唯一性,使用前缀编码 4.频率低的采用短编码,频率高的采用长编码。
大忽悠爱学习
2021/03/18
8050
当Kotlin遇见数据结构丨使用哈夫曼编码解压文件
哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。
码脑
2019/04/11
6460
当Kotlin遇见数据结构丨使用哈夫曼编码解压文件
【数据结构】认识赫夫曼树与赫夫曼编码 上手实现压缩文件和解压
给你一个数列 {13, 7, 8, 3, 29, 6, 1},要求转成一颗赫夫曼树.
冷环渊
2022/03/24
5200
【数据结构】认识赫夫曼树与赫夫曼编码 上手实现压缩文件和解压
数据结构(五):哈夫曼树(Huffman Tree)
哈夫曼树(或者赫夫曼树、霍夫曼树),指的是一种满二叉树,该类型二叉树具有一项特性,即树的带权路径长最小,所以也称之为最优二叉树。
zhipingChen
2018/09/13
2.9K0
数据结构(五):哈夫曼树(Huffman Tree)
当Kotlin遇见数据结构丨使用哈夫曼编码压缩文件
哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。
码脑
2019/04/11
6040
当Kotlin遇见数据结构丨使用哈夫曼编码压缩文件
文心一言 VS 讯飞星火 VS chatgpt (224)-- 算法导论16.3 6题
为了表示字母表 C={0,1,…,n−1} 上的任意最优前缀码,并仅用 2n−1+n⌈lgn⌉ 位,我们可以按照以下步骤进行:
福大大架构师每日一题
2024/04/11
1440
文心一言 VS 讯飞星火 VS chatgpt (224)-- 算法导论16.3 6题
哈夫曼编码
构建最短带权路径长度的二叉树,叫做哈夫曼树,也叫最优树(权重越大的结点离树根越近)
晚上没宵夜
2022/05/09
4070
哈夫曼编码
C++ 漫谈哈夫曼树
则称符合上述条件的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。
一枚大果壳
2022/08/23
6680
C++ 漫谈哈夫曼树
推荐阅读
相关推荐
原以为哈夫曼树、哈夫曼编码很难,结果……
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档