找回密码
 立即注册
查看: 204|回复: 0

哈夫曼编码

[复制链接]
发表于 2023-2-19 11:50 | 显示全部楼层 |阅读模式
哈夫曼编码


      概念
        前缀码的二叉树及权值哈夫曼编码的设计思想
      实例伪代码


概念

哈夫曼编码是一种字符编码方式,是可变长编码的一种,1952年提出,依据字符在文件中出现的频率来建立一个用0,1串表示各字符,使平均每个字符的码长最短的最优表现形式。
应用于图像压缩和大容量存储
为了正确解码,可变长编码必须满足,二元前缀码的性质任何字符的代码都不能作为其他字符代码的前缀
非前缀码的例子
a:001, b:00,c:010,d:01
解码的歧义,例如字符串0100001
解码1:01,00,001 d, b, a
解码2:010,00,01 c,b,d
前缀码的二叉树及权值



哈夫曼编码的设计思想

    以字符的使用频率做权构建一棵哈夫曼树,然后利用哈夫曼树对字符进行编码,称为哈夫曼编码具体是将所要编码的字符作为叶子节点,该字符在文件中的使用频率作为叶子节点的的权值,以自底向上的方式、通过执行n-1次的“合并”运算后构造出最终所要求的树,即哈夫曼树,它的核心思想是让权值大的叶子离根最近采用的贪心策略:每次从树的集合中取出双亲为0且权值最小的两棵树作为左、右子树,构造一棵新树,新树根节点的权值为其左右孩子节点权值之和,将新树插入到树的集合中
实例

对下图 a、b、c、d、e、f 六个字符进行哈夫曼编码



第一次:

下一步:


下一步:


下一步:


下一步:

一共2n-1个节点,合并了n-1次
最终结果:



伪代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 05:28 , Processed in 0.118416 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表