【4月第一周学习记录】数据结构与算法王卓-第五章树和二叉树-哈夫曼编码

目录

1. 哈夫曼编码的作用

2. 构造哈夫曼编码的方法

3. 代码实现

4. 哈夫曼编码的实际应用——文件编码与译码

效果

编码部分实现

解码部分实现 


1. 哈夫曼编码的作用

缺点:占用空间较多

改进方式:如果按照哈夫曼树的思想,给使用频率多的字符一个短编码,则转换后的字符串也会大幅缩短。

改进:

使用此简化方法,则在数据集较大时能显著的减少编码长度。但会出现一个新问题,重码问题。

即:0000的多种解码方式

于是,合理的前缀编码重要性就体现了。

2. 构造哈夫曼编码的方法

问题:什么样的前缀码可以使电文总长最短?

解决方法:

例子:给字符集编码

解哈夫曼编码例:

若编码为1101000, 则可以根据上图推出译文为CAT

两个问题

性质: 哈夫曼编码是最优前缀码

3. 代码实现

数据结构与算法王卓-习题-第五章树和二叉树-哈夫曼编码_Finale_R的博客-CSDN博客

4. 哈夫曼编码的实际应用——文件编码与译码

效果

如果按明文进行存储:

使用哈夫曼编码存储,节约了一半左右的空间:

编码部分实现

步骤

 

1. 每个字母的权值如何决定

2. 构造哈夫曼树

n个字母对应2n-1个结点,每个结点有四个成员(weight, parent, lch,rch)

 

3. 哈夫曼编码 

4. 查编码表,得到每个字母的编码,至此可以进行翻译

解码部分实现 

步骤

例:

笔者按:

哈夫曼树不唯一,看过第三节代码的人都能反应过来,这就意味着依据同一份频度表,译码树也不唯一,则此编码译码操作便失去了意义。 

所以为保证编码译码在同一频道工作:构造树时需要做规定,如:左权重小于右权重,权重相等时,按字母表顺序排左右等等。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值