数据库课设——哈夫曼树编码

一、实验目的和要求

利用哈夫曼树编码写出一个解压缩软件。

二、实验环境

VisualStudio,qt

三、实验内容

(1)压缩对象为外存任意格式任意位置的文件。
(2)运行时,压缩原文件的规模应不小于5K。运行后,外存上保留压缩后的文件。
(3)提供解压文件与原文件的相同性对比功能。
(4)建议,形成带交互界面功能的系统。

  • 实验过程

4.1 任务定义和问题分析

①图形交互:Qt编程

②建立哈夫曼树

③利用文件流进行文件操作。

4.2 数据结构的选择和概要设计
建立哈夫曼树

4.3 详细设计

问题拆解为以下几个子问题:

  1. 读取传入文件,进行字符权重统计
    2.将出现的字符放入哈夫曼树结点,构建哈夫曼树,获取哈夫曼编码
    3.将编码相关信息写入压缩后的文件,再将传入文件的每个字符按照哈夫曼编码转换,每8个二进制位作为一个字节传入压缩后的文件
    4.解压部分:将传入的已压缩文件进行文件流读取,获取编码信息进行还原

根据以上问题寻找解题方案:

①读取传入文件,需要用到文件流。

②哈夫曼结点的构造,和二叉树没有什么区别,只是在封装的struct里面加了unsigned char 型的字符,int型的权重,string型的哈夫曼编码,和是否是叶子结点的bool型标记(哈夫曼树叶子结点才是我们需要的编码)。将前面我们获取到的字符和权重加进去。

③传入哈夫曼编码阶段:遍历先前在读取文件时获取的字符串,将字符串的每一位转化为哈夫曼编码,用另一个字符串储存。这里不妨称这个字符串为二进制字符串,这个二进制字符串按8分割到最后可能会有不足8位的部分,对其进行补0操作。最后再传入一个字节,记录补0数。

④压缩函数和解压函数。

五、测试及结果分析

对各种数据运行程序和算法的结果记录和分析,并对错误所作的修改和结果。

5.1 实验数据

压缩前

压缩后

解压中

解压后

六、实验收获

实验过程中遇到了越压缩越大,以及对部分类型的文件压缩效果一般的问题,磕磕绊绊的心理历程。对压缩与解压缩有了更好的认知。

七、参考文献

百度

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值