数据结构【二】:霍夫曼编码

霍夫曼编码(Huffman Coding)是可变长编码(VLC)的一种。本质上使用变长编码表对源符号进行编码,通过评估源符号出现概率的方法进行分类,将出现几率较高的源字符使用较短的编码,出现几率较低的源字符使用较长的编码,使得整体的字符串的平均长度、期望值较低,从而达到无损压缩数据的目的。

霍夫曼编码的具体步骤

步骤1:将源符号的概率按从小到大排序成序列A;
步骤2:把两个最小的概率相加a、b, 得出概率值,放置在序列A中,记为z,同时删除a,b,和原序列中值按照从小到大排序,并记录a,b,z二叉树,且二叉树左叶值比右叶值小;
步骤3:重复步骤2,形成整体二叉树,左树标记为0,右树标记为1,从上到下即为该源符号的编码;

例:已知某文档包含5个字符,每个字符出现的频率如下,采用霍夫曼编码进行文档压缩,则单词"cade"的编码为?,文档的压缩比是多少?

字符abcde
概率%4010201614

解:
步骤1:将所有的字符按照从小到大排序,即b:10,e:14,d:16,c:20,a:40;
步骤2:将最小的两个概率值取出,左小右大组成二叉树,二叉树的节点为24
在这里插入图片描述

步骤3:重新将概率按照从小到大排序,即d:16,c:20,24,a:40;并选出最小的两个概率值,左小右大组成二叉树,二叉树节点为36;
在这里插入图片描述

步骤4:重复步骤3,将概率重拍,即24,36,a:40,并组成二叉树;左树标记为0,右树标记为1;
在这里插入图片描述

因此,a的编码为0,b的编码为101,e的编码为101,d的编码为110,c的编码为111;
cade的编码为 1110110101;
那么文档的压缩比怎么计算呢?
因为该文档有a、b、c、d、e五个字符,那么其处于2的2次方和2的3次方之间,则可用3位2进制数进行编码,假设a:000,b:001,c:010,d:011,e:100;
而采用霍夫曼编码,则文档压缩比计算为
压缩后编码长度 = 1 ∗ 40 % + 3 ∗ 10 % + 3 ∗ 20 % + 3 ∗ 16 % + 3 ∗ 14 % = 2.2 文档压缩比 = 1 − 2.2 / 3 = 27 % 压缩后编码长度 = 1*40\% +3*10\%+3*20\%+3*16\%+3*14\% = 2.2\\ 文档压缩比 = 1 - 2.2/3 = 27\% 压缩后编码长度=140%+310%+320%+316%+314%=2.2文档压缩比=12.2/3=27%

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值