使用这种分布(a),您可能想要研究可变长度编码方案,例如 Huffman。与固定的 5 位大小相比,这将为您提供更好的压缩。它们通过使用更少的位来表示更常见的值(并使用更多的位来表示不常见的值)来降低平均位宽度。
举一个简单的例子,假设一个0
位代表数字一,所有其他数字由一个1
位表示,后跟您当前的 5 位方案。
这意味着您为 1 的每个值(1,242,149 x 4 = 4,968,596 位)节省了 4 位,而为所有其他值(1,239,964 位)“浪费”了一位,净节省了 370 万位。
这是针对您的特定数据集的“硬编码”霍夫曼方案,旨在说明其工作原理,您可能希望对任意数据集更具适应性。
并且扩展它以包含更多更大的数量会带来额外的改进。我们已经知道最高价值的节省:
Bit pattern Value Quantity Saved bits
0 1 1,242,149 4,968,596 (4 per)
1xxxxx >1 1,239,964 1,239,964- (1 per)
---------
Net saving 3,728,632 (extra return 3,728,632)
对于前两个值:
Bit pattern Value Quantity Saved bits
0 1 1,242,149 4,968,596 (4 per)
10 2 620,038 1,860,114 (3 per)
11xxxxx >2 619,926 1,239,852- (2 per)
---------
Net saving 5,588,858 (extra return 1,860,226)
对于前三名:
Bit pattern Value Quantity Saved bits
0 1 1,242,149 4,968,596 (4 per)
10 2 620,038 1,860,114 (3 per)
110 3 309,399 618,798 (2 per)
111xxxxx >3 310,527 931,581- (3 per)
---------
Net saving 6,515,927 (extra return 927,069)
对于前四名:
Bit pattern Value Quantity Saved bits
0 1 1,242,149 4,968,596 (4 per)
10 2 620,038 1,860,114 (3 per)
110 3 309,399 618,798 (2 per)
1110 4 154,983 154,983 (1 per)
1111xxxxx >4 155,544 622,176- (4 per)
---------
Net saving 6,980,315 (extra return 464,388)
在此级别,您的每个数字固定 5 位的方案会产生 12,410,565 位。净节省 6,980,315 位,现在总压缩大小为 5,430,250 位,比固定位大小方法节省约 56 位。
随着更多价值的增加,您可以看到额外的投资回报迅速减少。除了前四个值之外,您不会使用此硬编码方案保存任何内容,因为每个项目的位节省为零(之后为负数)。真正的自适应编码会给你更多的节省(因为它也在优化xxxxx
比特),但可能不会太多。
(a)从外观上看,这是一个非常人为的分布。每个数量大约是前一个数量的一半,使可变长度编码成为理想的解决方案。