标签:25 哈夫曼 编码 0.25 0.2 0.15 2021 字符 05
哈夫曼编码
问题描述
字符 | A | B | C | D | E |
---|---|---|---|---|---|
出现概率 | 0.35 | 0.1 | 0.2 | 0.2 | 0.15 |
如上图所示,要发送一串编码,有100个字符,分别是A, B, C, D, E,所占比例也如图所示。
假设:编码规则如下
字符 | A | B | C | D | E |
---|---|---|---|---|---|
编码规则 | 000 | 001 | 010 | 011 | 100 |
问题提出:我们用三位来表示一个字符(因为两位最多表示四个字符),我们想让传输编码的速度更快,在其它条件不变的情况下,我们就减少内存的大小。
分析:为了减少内存的大小,我们就减少字节的位数,但是我们得考虑减少位数会不会产生歧义,例如:假设A的编码是00,E的编码是100,发送AE,以二进制的形式传输,收到之后为00100,这时候得进行解码,可是是解码成BA还是AE,这个时候就产生了歧义,为了解决这个歧义,我们得构造哈夫曼树。
问题的解决:首先我们看到第一张表,我们要使内存更小,就要让出现频率大的字符位数变小。所以我们开始构建哈夫曼树。
第一步:将字符的概率按从小到大排序
B | E | C | D | A |
---|---|---|---|---|
0.1 | 0.15 | 0.2 | 0.2 | 0.35 |
第二部:将前两个字符合并后再排序,于是就有树的如下构造
第一步
第二步
第三步
第四步
第五步
得到哈夫曼树之后,我们左侧编0,右侧编1,所以得到哈夫曼编码
字符 | A | B | C | D | E |
---|---|---|---|---|---|
哈夫曼编码 | 11 | 000 | 01 | 10 | 001 |
这样的话我们就解决了内存的问题与歧义
标签:25,哈夫曼,编码,0.25,0.2,0.15,2021,字符,05 来源: https://blog.csdn.net/weixin_46049324/article/details/117265633
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。