0.9514747859(4204字节输出)
注意:上面的图像不是我使用的实际文件,而是图像。
这是文件的十六进制转储:https : //gist.github.com/pommicket/cf2982e8ecf09a4de89d3a849526c64b
该文件为netpbm格式,可以使用以下C代码生成:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
if (argc < 2) {
fprintf(stderr, "Please pass in seed.\n");
return EXIT_FAILURE;
}
srand(atoi(argv[1]));
FILE *fp = fopen("image.pgm", "w");
int width = 2, height = 1993;
fprintf(fp, "P5 %d %d 255 ", width, height);
for (int i = 0; i < width * height; i++) {
fputc(rand() & 0xFF, fp);
}
fclose(fp);
return 0;
}
必须将随机种子传递到程序中。尝试了一些种子之后,我得到了一个可以产生4204字节gzip压缩文件的种子。正如Nnnes指出的那样,tar
它将在文件中包含元数据,因此您的结果可能与我的不同。
netpbm并非在所有地方都受支持,但是它可以与imagemagick一起使用convert
(因此只需convert image.pgm image.png
将其转换为png)。
为什么使用此图像/格式?
由完全随机字节组成的文件很难压缩(实际上,平均而言,任何可能的压缩算法都会这样做,这总比不对随机文件进行压缩更好)。实际文件的内容P5 2 1993
后面紧跟3986个随机字节,这就是为什么gzip很难压缩它的原因。
tar
默认情况下在输出文件中包含元数据,包括mtime。这会影响最终的压缩文件大小-有些mtime的压缩效果好于其他时间。将命令更改为gzip -n image
可以使输出大小确定,而与mtime(和输入文件名)无关。