我正在学习Gzip的内部工作原理,了解到它使用了Huffman编码和LZ77的组合。
我也意识到,Gzip文件被分成块,每个块都有一个为其构建的字典。然后类似数据的频繁出现会被替换为指向字典中位置的指针。
所以短语“horses race other horses”中的单词horses会被一个指针代替。
但是,如果我有一个32位整数数组,而它仅存储最多24位的数字呢?举个例子,假设这些24位数字非常随机,很难压缩,也很难找到重复的数据。
这将使得每个整数的前8位为易于压缩的0字符串,但每个字符串都需要一个指针,每个指针仍然占用一定的数据量。即使是1位指针(我知道这比实际情况可能更小),仍会占用原始空间的12.5%。
当数组可以轻松地缩减为具有基本模式识别的“24位”数组时,这似乎有些多余。所以我的问题是:
Gzip是否包含比字典指针更好的压缩文件的机制?
Gzip可以将大量重复数据压缩成多少,并紧随其后的难以压缩的小量数据?