【发布时间】:2018-05-27 20:32:50
【问题描述】:
我正在研究 Gzip 的内部工作原理,我知道它使用了Huffman Coding 和LZ77 的组合。
我也意识到一个 Gzip 文件被分成多个块,每个块都有一个为它构建的字典。然后将频繁出现的相似数据替换为指向字典中位置的指针。
因此,短语“horses race other horses”将用指针替换单词 horses。
但是,如果我有一个 32 位整数数组,但它只存储最多 24 位的数字呢?为了争论,假设这些 24 位数字非常随机,难以压缩且难以找到重复。
这将使每个整数的前 8 位成为易于压缩的 0 字符串,但每个字符串都需要一个指针,并且每个指针仍会占用一定量的数据。即使是 1 位指针(我知道它比实际可能的要小)仍会占用原始空间的 12.5%。
当数组可以很容易地简化为具有基本模式识别的“24 位”数组时,这似乎有些多余。
所以我的问题是:
Gzip 是否包含比字典指针更好地压缩文件的机制?
Gzip 压缩少量重复数据的效果如何,其次是少量难以压缩的数据?
【问题讨论】:
标签: compression gzip deflate