中间遇到过很多问题,不断的找办法,其实网上有很多前辈遇到过类似的问题,基本上我们目前这个学习阶段遇到的都有解决方法,我体会很深,需要不断坚持和学习;在学习霍夫曼的过程中,我了解了其他的lzw字典压缩方法,可以用于文件夹的压缩,这也算意外收获吧,凡事亲力亲为,必然收获很大;
<!--EndFragment-->
1.霍夫曼树应用(利用霍夫曼编码实现了文件的压缩和解压,代码有点多,树的运用主要在Tree这个类里面);
功能:实现单个文件压缩的和解压;(500MB左右的文件夹我用系统给的api里面的方法实现了,代码很短,用eclipse写的,这个不能实现文件夹的操作,另外一个博客里面写了压缩文件件夹的方法);
压缩:
1.利用字节流读取计算文件里面每一字节出现次数;
2.用出现次数来作为节点权值构建哈弗曼树;
3.利用节点类构建哈弗曼树的时候给节点添加属性来记录编码;
4.利用递归得到每一个叶子节点的哈弗曼编码,然后获得所有字节的01串;
5.利用已经得到的01串进行byte和string类型转换实现进一步压缩;
6. 接下来便是写文件,但是这才是需要细心的地方:
(写入顺序)压缩文件的内容:
a.将原文件大小写入文件// dos.writeInt(fileSize);
b.将码表的大小写入文件//dos.writeInt(mapSize);
c.将每个字节写入文件//fos.write(listBy.get(i));
d.将每个字节对应的哈夫曼编码大小写入文件//fos.write(codeSize);
e.将每个字符对应的哈夫曼编码写入文件
// dos.writeChars(hfmcode_next);
f.写入压缩后的字节数组的大小
g.写入压缩后的文件内容
解压:
1.fileSize = dis.readInt();// 得到原文件的大小
2.int mapSize = dis.readInt();// 得到码表的大小
3. 利用循环读取码表内容,开始存入为名称,大小,编码(前面两个使用byte类型写入,编码是writeChars(),则取出来时也要对应,将取得的字节,名称,还有编码存入map,清空hadmcode_next最后得到码表map。
4.int len = dis.readInt();// 得到压缩好的字节数组的大小
5.得到压缩时存入的文件的字节数组,转换成Int[]补0然后得到01串
6.解码过程,取得数组中第一个数或者字节,然后遍历码表,用码表键的字节名称与之进行匹配,解码
(写的有点口语化,如果看不清楚,请直接去程序里面看,写的很详细!)
使用方法:
(没有写界面,因为只能压缩一个单文件)首先的新建一个用于测试的文件,最好里面的字节重复率高一点,因为这样哈弗曼编码会越短进而压缩率会高; 打开Main类,已经new了一个jieya和yasuo类的实例,可以分别调用实现压缩和解压;文件路径可以修改一下;
3.详细设计(详细代码附在文件里面,需要的话可以免费下载)
注意:这个程序有5个类,分别是Node,Tree,yasuo,jieya,Main;
<!--EndFragment-->
<!--EndFragment-->
相关推荐
数据结构课程设计霍夫曼文件压缩解压。 文档加源代码 还有关键路径的小福利代码 欢迎下载
利用霍夫曼编码编写文本文件压缩程序.内有代码和设计报告
对于任意一个文件进行压缩,压缩后的文件名为原文件名称去掉后缀加上.hz,例如,原来的未压缩文件的名字为a.txt,压缩后为a.hz,压缩后的文件信息使用TLV结构(TYPE-LENGTH-VALUE),文件信息包括霍夫曼编码码表,...
霍夫曼文件压缩算法 许可:公有领域,不做任何担保尼罗什·阿卡德(Nilesh Akhade) 关于 霍夫曼算法是一种有效的文件压缩和解压缩方法。 该程序完全遵循霍夫曼算法。 它从输入文件中读取频繁的字符,并将其替换为...
课程设计报告是基于哈夫曼编码实现的文件压缩解压,报告中有源码及演示的例子~~供大家参考!!
数据压缩的基本概念和重要性对目前主要的压缩方法作了简单的说明并给出了数据压缩过程的基本模型以Haffman编码为主要研究对象分析了实现该算法的数据结构并以一个实例说明了Haffman编码的主要过程
源代码和实验报告一套,大二上做的,水平有限。见谅!
将文本文件进行压缩 数据结构课程设计 大二的同学们注意力和霍夫曼树编码有关
知识点:堆排序、霍夫曼树、二叉树遍历、存储数据结构设计 文件流操作、字符汉字编码方式、二进制文件读写 备注:字符文件、汉字文件的压缩与解压
数据结构霍夫曼压缩编码课程设计。压缩率不是非常高但是基本达标。
采用哈夫曼编码思想实现文件的压缩和恢复功能,并提供压缩前后的占用空间之比。 要求: (1)描述压缩基本符号的选择方法。 (2)运行时的压缩原文件的规模不小于5K。 (3)提供恢复文件与原文件的相同性对比功能。
霍夫曼编码 霍夫曼编码用于压缩/解压缩文件。 这是一个数据结构和算法课程的项目 启动 HuffViewer 处理文件。 有一个 UI 供您选择文件或查看处理状态。
采用我在高级算法和数据结构课程中完成的霍夫曼压缩作业。 已完成的 TODO: 实现了一个用户界面 改进了创建前缀树的逻辑,将节点添加回 pqueue 以利用最小堆结构。 导出压缩文本文件。 去做: 将前缀树添加到...
数据结构java版 pdf ,书中有霍夫曼压缩、Dijkstra最小路径算法,平衡搜索树,八皇后问题,RSA加密算法、TreeSet、TreeMap、队列、优先队列、堆栈等算法
霍夫曼算法 ,数据结构课设一般都会用到的吧。。。。。
通过Huffman编码基本流程, 学习二叉树数据结构和生成方法,并用VC++调试Huffman编码程序。
Huffman-Coding-Using-... 这是使用 JAVA 中实现的优先队列(使用最小堆)、二叉搜索树和链表等数据结构的霍夫曼编码的实现。 该项目可以对任何类型的文本文件进行无损数据压缩。 应用程序还可以解码以取回原始文件。
用Huffman Tree实现了一个文件的压缩与解压程序 说明 压缩后文件类型为.huf 格式: HEAD文件+Huffman压缩后的内容 解压后在原文件名前加上"Re" GraphCPro 基于命令行的景区景点路径规划系统 说明 寻路方式为DFS,...