其他分享
首页 > 其他分享> > 2021-05-25

2021-05-25

作者:互联网

哈夫曼编码

问题描述

字符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

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

标签:25,哈夫曼,编码,0.25,0.2,0.15,2021,字符,05
来源: https://blog.csdn.net/weixin_46049324/article/details/117265633