0

我尝试使用 LZW 压缩方法压缩 zip 文件(以下链接中提供的代码),

http://rosettacode.org/wiki/LZW_compression#C

它创建的编码文件长度比原始文件大小太长,这是什么原因?请任何人帮助我了解实时发生的事情。

4

1 回答 1

1

无损压缩不可能将每个文件压缩成更短的文件。

这是因为有 256 N个文件的长度为N字节,但有 (256 N -1)/255 个文件的长度小于N字节。因此,并非每个文件都可以映射到较短的文件。

更重要的是,如果任何文件变得更短,那么一些更短的文件必须放弃它的位置才能使其成为可能。所以有些文件必须变大。

无损压缩的工作原理是识别人类创建的典型文件中的常见模式,并将长的高概率字节序列转换为更短的序列。这样做的代价是一些序列变得更长。设计的目标是使典型文件压缩,但非典型文件必须变长。

如果压缩完成了它的工作,冗余信息将从文件中删除,并且输出类似于随机数据。然后输出不能被进一步压缩。

于 2013-10-21T11:12:32.083 回答