【发布时间】:2015-05-13 19:47:26
【问题描述】:
随机字符串应该是不可压缩的。
pi = "31415..."
pi.size # => 10000
XZ.compress(pi).size # => 4540
随机的十六进制字符串也会被显着压缩。但是,随机字节字符串不会被压缩。
pi 的字符串只包含字节 48 到 57。在整数上加上前缀代码,这个字符串可以被高度压缩。本质上,我通过以字节表示我的 9 个不同字符(或 16 个,在十六进制字符串的情况下)来浪费空间。这是怎么回事?
有人可以向我解释底层方法是什么,或者指出一些来源吗?
【问题讨论】:
-
由我们来猜测您使用的是什么编程语言和压缩算法?
-
@RobbyCornelissen 我认为算法是 XZ - 它在代码中。
-
为什么字符串是不可压缩的?它只是一系列位,就像文件一样。为什么任何压缩算法都能够压缩文件位而不是字符串位?
-
注意 π 比较特殊,实际上可以无限压缩。例如。
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5;for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}。但是 xz 无法检测到这一点。
标签: string random compression pi xz