Huffman编码

原理

为了达到大的压缩率,以字符的使用频率作为权值构造一颗哈夫曼树,然后利用哈夫曼树对字符进行编码。

步骤

①按照频率从小到大的顺序进行排列;

②每次从中选择出两个概率为最小的节点相加,形成一个新的节点,构造一个称为“Huffman树”的二叉树;

③对这个二叉树进行编码

 

:对数据序列aaaa bbb cc d eeee fffffff 

       其概率分布为:a:4/22  b:3/22  c:2/22  d:1/22  e:5/22  f:7/22

       概率大小的排序为:d, c, b, a, e, f

按步骤构造出二叉树即可:

91fcb6901667424bbe5577cb4aacd931.jpeg

 这种方法是学《数字图像处理》时老师讲的,跟数据结构中提及的可能有一点点子不太一样,但是原理还是一样的,我个人认为这样构造二叉树更加方便,看到的同学可以了解一下哦~

 

求压缩比

已知某文档仅包含6种不同的字符,其每个字符出现的频率如下表所示,采用霍夫曼编码对该文档压缩存储,则单词“face”的编码为(  ),该文档的压缩比为(  )。

e9e0428e23b9462a9d7f1ea8adecb67b.png

1):【A】110001001101  【B】101000010100 【C】001101001100  【D】110101001100

(2):【A】20%  【B】25%  【C】30%  【D】40%

 1)构造哈夫曼树,编码

将频率排序后,依次将频率最小的两个节点相加

 2ff2addbcb5b41dbab30f92db21f9161.jpeg

得到face的编码为:1100 0 100 1101 选答案A

 需要注意,两个节点之间频率较大的那个分支为1,哈夫曼树构造好了之后从右往左看得到编码(这个哈夫曼树就相当于向右旋转了90度的二叉树)

2)计算压缩比

1. 2^2=4,2^3=8,所以6个字符最少需要3位二位进数表示,即每个字符用三位表示

2. 按照出现频率计算加权平均长度:字符位数 * 出现频率

a的位数 * 45% + b的位数 * 13% + c的位数 * 12% + d的位数 * 16% + e的位数 * 9%+ f的位数 * 5%

= 1 * 45% + 3 * 13% + 3 * 12% + 3 * 16% + 4 * 9%+ 4 * 5%

= 2.24位

3. 计算压缩比

未压缩长度为 3 ,压缩后平均长度为 2.24

(3 - 2.24)/3 ≈ 25%

选答案B

 

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值