压缩文件的概念是什么?我可以理解去除空格等操作的概念,但在解压缩过程中需要添加多少/在哪里添加这些空格呢?
字节流压缩的基本过程是什么?
压缩文件的概念是什么?我可以理解去除空格等操作的概念,但在解压缩过程中需要添加多少/在哪里添加这些空格呢?
字节流压缩的基本过程是什么?
A
)字节重复16次组成,则不要将其表示为8位序列01000001
,而应缩短为1位序列0
。然后文件可以通过0000000000000000
(十六个0
)来表示。因此,由0x41字节重复16次组成的文件可以通过由0x00字节重复两次组成的文件来表示。01000001
与位0
相比没有提供任何额外信息。因此,在这种情况下,我们丢弃多余的位,以获得更短的表示方法。0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
现在请把它重复2048次。按照上述方法的一种是使用三位表示字节。
000 0x41
001 0x42
010 0x43
011 0x44
100 0x45
101 0x46
110 0x47
111 0x48
0x05 0x39 0x77
,将以上字节模式表示为00000101 00111001 01110111
。0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
通过单个比特0
的方式。然后,我们可以通过重复2048次0
来表示上述字节模式,这将成为重复256次的字节0x00
。现在我们只需要存储字典。
0 -> 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
我们使用字节模式0x00
重复256次,并将文件从16,384字节压缩到(取决于字典)256字节。
简而言之,这就是压缩的工作原理。整个过程就是在给定文件中找到短小高效的字节和字节序列的表示方法。这是一个简单的想法,但细节(即找到表示方法)可能会非常具有挑战性。
例如,请参见:
压缩的概念基本上是统计学的。如果你有一系列字节,字节N实际上是X的机会取决于前面的字节0..N-1的值分布。没有压缩,你为每个可能的值X分配8位。有了压缩,分配给每个值X的字节数量取决于估计的概率p(N,X)。
例如,给定一个序列"aaaa",压缩算法可以将高值分配给p(5,a),将较低的值分配给p(5,b)。当p(X)高时,分配给X的比特串将很短,当p(X)低时,使用长比特串。通过这种方式,如果p(N,X)是一个好的估计,那么平均比特串将比8位短。