赫夫曼压缩图解(二)

接上文《 赫夫曼压缩图解(一)》

四 :创建编码表并进行解码

4.1编码的三种方式及其优劣

4.1.1定长编码:

定产编码是将字符转为ASCII码,转为八位二进制,
但我们很容易发现,这句话并不长,但是传输信息却需要396位,那么我们怎么传输信息压缩一下呢?
在这里插入图片描述

4.1.2非定长编码:

我们发现这一句话中很多字母是重复的,那么我们是不是可以把出现次数也编码进去,出现次数多的编码长度就短一些,出现次数少的编码长度就长一些,这就解决了第一个问题在这里插入图片描述
但这也带来了新的问题:当我们取消空格,给对方发过去后,她该怎么解码?例如:对于第一个1和第二个1,就有两种理解歧义:1是空格,11代表两个空格,11是字母c

4.1.3赫夫曼编码:

在赫夫曼编码中,我们使用键值对来存储字符和他出现的次数:a:11

同时把该字母出现的次数作为叶子节点的权值,构建赫夫曼树

在赫夫曼树中,还有一个重要信息就是路径,我们怎么把路径联系起来呢?

因为传输是二进制,我们最后肯定得转为二进制,而每一个叶子节点(也就是字符)的路径是唯一的,那么我们可以将左叶子节点的路径设为0,右叶子节点的路径设为1,如图编码
在这里插入图片描述
在消除空格之后,看我们是否解决了上面两种编码的问题:

从1开始寻找,没有以1对应字符,查找11,也没有,查找111,对应c,
然后从这里断开,开始1,没有,10对应a, 之后00对应n,之后01对应空格,
我们发现解码方式和我们刚开始编码后是一致的顺序,并没有发生对应错误,无损压缩。
最重要的一点,这里的传输长度是122位,比之前的396位压缩了70%

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值