有没有办法预测在任意字符串上使用gzip获得什么样的压缩结果?什么因素导致最坏和最好的情况?我不确定gzip是如何工作的,但是例如一个字符串:
"fffffff"
与以下内容相比,可能会压缩得很好:
"abcdefg"
我从哪里开始?
由于
答案 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)