gzip压缩expections?

时间:2010-08-30 23:03:03

标签: compression gzip

有没有办法预测在任意字符串上使用gzip获得什么样的压缩结果?什么因素导致最坏和最好的情况?我不确定gzip是如何工作的,但是例如一个字符串:

"fffffff"
与以下内容相比,

可能会压缩得很好:

"abcdefg"

我从哪里开始?

由于

2 个答案:

答案 0 :(得分:3)

gzip使用deflate algorithm,粗略描述,通过用指向字符串第一个实例的指针替换重复的字符串来压缩文件。因此,高度重复的数据压缩效果非常好,而纯随机数据压缩的程度非常小(如果有的话)。

通过示范:

[chris@polaris ~]$ dd if=/dev/urandom of=random bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.296325 s, 3.5 MB/s
[chris@polaris ~]$ ll random
-rw-rw-r-- 1 chris chris 1048576 2010-08-30 16:12 random
[chris@polaris ~]$ gzip random
[chris@polaris ~]$ ll random.gz
-rw-rw-r-- 1 chris chris 1048761 2010-08-30 16:12 random.gz

[chris@polaris ~]$ dd if=/dev/zero of=ordered bs=1048576 count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.00476905 s, 220 MB/s
[chris@polaris ~]$ ll ordered
-rw-rw-r-- 1 chris chris 1048576 2010-08-30 16:12 ordered
[chris@polaris ~]$ gzip ordered
[chris@polaris ~]$ ll ordered.gz
-rw-rw-r-- 1 chris chris 1059 2010-08-30 16:12 ordered.gz

我的纯随机数据样本实际上由于开销而变得更大,而我的文件满了零压缩到其先前大小的0.1%。

答案 1 :(得分:1)

gzip使用的算法称为DEFLATE

它结合了两种流行的压缩技术:重复字符串消除和位缩减。两者都在文章中解释。

基本上,根据经验,当某些角色比其他角色更常使用和/或角色经常连续重复时,压缩效果最佳。当字符在输入中均匀分布并且每次都改变时,压缩变得最糟。

还有测量结果,例如数据的entropy