根据Yuval的回答,稍有不同的解释和示例来说明问题。
理论
取一个字节长(位)的文件。压缩算法如下:12816128
- 确定的二进制扩展名与内容匹配的位置。π
- 存储偏移量和已排序的位数()。128
对于该文件的内容应该是周围的偏移个位; 但是,找到偏移量很耗时,因为它需要:2128
- 深入搜索位模式;和
- (平均)查看不同的位置。2128
在中发生得较早以达到明显压缩的匹配将不会改变。也就是说,不可能使用压缩有趣的真实数据,因为真实单词字符串不太可能早出现。πππ
另请参阅信息熵。
例
让我们压缩一个社会安全号码(SSN):938-933-556。使用计算要对该值编码的位数,该位数约为并且必须四舍五入为(因为位数不可分割)。29.8 30log2(938933556)29.830
在,该SSN开始于偏移,需要的比特,或〜,并且必须也被舍入到。偏移可能更早,但是不太可能需要更少的位。597 ,507 ,393 升Ô 克2(597507393 )29.2 30π597,507,393log2(597507393)29.230
也许我们可以对数字进行分块?
- 938,偏移位1,124
- 933,偏移位1,216
- 556,偏移量位11,727
那是位,甚至更糟。也许是不同的分块?36
- 9,389,335,偏移量位15,312,393
- 6,偏移位8
那是位,好于,但是有问题。首先,添加非均匀分块需要更多信息以指示分块在何处开始和停止。其次,找到最佳的分块以获取最少的位会花费更多的时间。第三,保存三位几乎不算压缩。302730
不同的先验数或多或少将具有相同的统计结果。即使您剃掉一根头发,例如,剃掉了两块钱,也必须指出使用的常数。三位允许算法从八个不同数字之一中进行选择。结果,由于搜索序列而不是一个序列,该算法将慢得多。N