Dzj's Huffman coding summary
Preview
哈弗曼编码目的:
文件压缩减少占用空间大小
主要分为两大模块: 1压缩 2解压
哈弗曼编码思路:
压缩:
读文件--》统计权值等相关数据--》建立哈夫曼树--》通过哈夫曼树得出各个叶子的编码值-》将编码写入文件(伪编码)--》*通过读伪编码文件将其转换为字节流写入压缩文件中
解压:
读压缩文件--》*将字节流转换为位流存入缓冲区--》通过哈夫曼树或编码值表译码--》写入解压文件中
*c或c++语言使用以字节为最基本单位,要写入位流编码,就需要先将编码没8个位转化成一个字节(ascll码)再通过字节流写入文件,这样就达到了间接存入二进制编码的目的
注意事项:
1.使用指针,必须是在不得已,思路清晰或能准确了解他的作用范围,否则千万别用!!!!!
2.二进制文件与文本文件的转换需考虑是否有换行符,而在编码方面最好最好要有二进制方式读取和写入。
3.写程序前一定有清晰的思路和流程,并把它写成流程图。
4.只要写一些比较大的程序时(对于我来说),一定要遵循面向对象的思想或模块化,结构化思想编写,否则,调试维护时是一个灰常灰常有难度的工程,比写代码还要大!!
5.注意写出的代码要有可移植性,虽然占用空间大,但这是必要要做的,因为以后可能会需要自己以前写的程序。
6.变量名和注释要取的准确到位(不足)
7.每个函数结束前,先考虑回收特别是指针问题的回收和防止野指针的出现
8.申请空间是首先要检查是否能够申请到还有文件是否为空等极端条件
9.Char范围-128~127
10...................................
凡是重基础(特重要!!!!!!!)
缺陷:
1.为了添加编码的文本显示,系统损失了一半时间去操作中间文件的写入。----可优化
2.程序结束时,指针没有进行全面回收和封杀(置null)
3.界面不友好,只做出了基本的主体。
可扩展性:
1.程序加密