哈夫曼编码

哈夫曼编码

问题描述

字符ABCDE
出现概率0.350.10.20.20.15

如上图所示,要发送一串编码,有100个字符,分别是A, B, C, D, E,所占比例也如图所示。
假设:编码规则如下

字符ABCDE
编码规则000001010011100

问题提出:我们用三位来表示一个字符(因为两位最多表示四个字符),我们想让传输编码的速度更快,在其它条件不变的情况下,我们就减少内存的大小。

分析:为了减少内存的大小,我们就减少字节的位数,但是我们得考虑减少位数会不会产生歧义,例如:假设A的编码是00,E的编码是100,发送AE,以二进制的形式传输,收到之后为00100,这时候得进行解码,可是是解码成BA还是AE,这个时候就产生了歧义,为了解决这个歧义,我们得构造哈夫曼树

问题的解决:首先我们看到第一张表,我们要使内存更小,就要让出现频率大的字符位数变小。所以我们开始构建哈夫曼树。
第一步:将字符的概率按从小到大排序

BECDA
0.10.150.20.20.35

第二步:将前两个字符合并后再排序,于是就有树的如下构造

0.1
B
0.15
E
0.25
C
D
A
第一步
0.1
B
0.15
E
D
A
0.25
0.35
0.2
C
第二步
0.1
B
0.15
E
D
A
0.55
0.25
0.45
0.2
C
  第三步
0.1
B
0.15
E
0.25
0.45
0.2
C
0.2
D
0.35
A
0.55
第四步
0.1
B
0.15
E
0.25
0.45
0.2
C
0.2
D
0.35
A
0.55
1.0
第五步

得到哈夫曼树之后,我们左侧编0,右侧编1,所以得到哈夫曼编码

字符ABCDE
哈夫曼编码110000110001

这样的话我们就解决了内存的问题与歧义

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值