压缩的思考及探索 压缩
程序员文章站
2024-03-25 15:09:16
...
压缩的思考及探索
思考:
用哈夫曼压缩方法将900KB的文件aaa,压缩为450KB的文件bbb,压缩率为50%,如果我继续用哈夫曼压缩文件bbb,是否可以得到225KB的文件ccc???
1)若可以,那么在不考虑时间复杂度的情况下,我将压缩过程循环n次,便能将一个无限大的文件压缩到足够小。???
2)若不可以,是越压越大还是没有效果,原因是什么???
经过反复试验,二次压缩得到的文件与首次压缩得到文件大小差不多,若连续压缩,会比上一级压缩文件大1-2KB。重复压缩的文件经过多次解压便可得到原文件。
重复压缩不会将文件越压越小,这个很好理解。哈夫曼压缩,说的直接点就是利用文件中重复出现的字符来节省空间,压缩过的文件中重复出现的字符很少,所以重复压缩文件不会越压越小。
但为什么多次压缩之后会比上一级压缩文件大1-2KB呢?这应该是头文件的问题,每次压缩,都会把前一次压缩的头文件当做文件内容存进新的压缩文件中,因此导致文件越压越大,并且压缩文件大小以一个很稳定的幅度增加。
进一步猜想:假设哈夫曼压缩法能将900KB的原文件aaa压缩为450KB的文件bbb,用LZW字典压缩法能将原文件压缩为300KB的文件ccc,那么,将哈夫曼压缩法与LZW字典压缩法交替使用,将文件多次压缩,猜想每次哈夫曼压缩结果都接近450KB,而每次字典压缩的结果将接近300KB。并且可以解压。(经试验证明,此猜想成立)
思考:
用哈夫曼压缩方法将900KB的文件aaa,压缩为450KB的文件bbb,压缩率为50%,如果我继续用哈夫曼压缩文件bbb,是否可以得到225KB的文件ccc???
1)若可以,那么在不考虑时间复杂度的情况下,我将压缩过程循环n次,便能将一个无限大的文件压缩到足够小。???
2)若不可以,是越压越大还是没有效果,原因是什么???
经过反复试验,二次压缩得到的文件与首次压缩得到文件大小差不多,若连续压缩,会比上一级压缩文件大1-2KB。重复压缩的文件经过多次解压便可得到原文件。
重复压缩不会将文件越压越小,这个很好理解。哈夫曼压缩,说的直接点就是利用文件中重复出现的字符来节省空间,压缩过的文件中重复出现的字符很少,所以重复压缩文件不会越压越小。
但为什么多次压缩之后会比上一级压缩文件大1-2KB呢?这应该是头文件的问题,每次压缩,都会把前一次压缩的头文件当做文件内容存进新的压缩文件中,因此导致文件越压越大,并且压缩文件大小以一个很稳定的幅度增加。
进一步猜想:假设哈夫曼压缩法能将900KB的原文件aaa压缩为450KB的文件bbb,用LZW字典压缩法能将原文件压缩为300KB的文件ccc,那么,将哈夫曼压缩法与LZW字典压缩法交替使用,将文件多次压缩,猜想每次哈夫曼压缩结果都接近450KB,而每次字典压缩的结果将接近300KB。并且可以解压。(经试验证明,此猜想成立)
推荐阅读
-
压缩的思考及探索 压缩
-
java制作可视化的简易压缩工具
-
如何使用gulp压缩图片并监视文件的变化自动进行打包嘞???看这篇就够了!!!
-
对文件和字符串压缩及解压缩类 博客分类: C#.Net c#压缩解压缩
-
删除jar包中的指定文件 博客分类: Java compress解压缩删除jar包文件删除zip包文件删除压缩包文件
-
Linux中的gz格式压缩 博客分类: Linux Linuxgz
-
Java压缩解压zip文件的中文文件名在Windows和Linux环境下乱码问题的解决方案 zipzipfilezipoutputstream
-
利用java解压.zip的压缩文件 博客分类: J2EE java解压zip
-
[转] Linux 下zip包的压缩与解压 博客分类: linux linuxzipunzip
-
linux下tar gz bz2 tgz z等众多压缩文件的压缩与解压方法 linuxtargzbz2tgz