Uen*_*enX -4 algorithm integer list lossless-compression
我想压缩一个整数列表,其中:
"出现"统计数据如下
所以请告诉我压缩这类数据的最佳方法(估计压缩比 - 如果可能的话 - 非常感谢).
有了这种分布(a),你可能想要研究一个可变长度的编码方案,比如Huffman.这将为您提供比固定的5位大小更好的压缩.它们通过使用较少的位来指示更常见的值(以及表示不常见值的更多位)来降低平均位宽.
举一个简单的例子,让我们说0一点代表第一,所有其他数字用一个1位代表当前的5位方案.
这意味着您为每个值保存4位(1,242,149 x 4 = 4,968,596位),并为所有其他值(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)
Run Code Online (Sandbox Code Playgroud)
对于前两个值:
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)
Run Code Online (Sandbox Code Playgroud)
前三名:
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)
Run Code Online (Sandbox Code Playgroud)
前四名:
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)
Run Code Online (Sandbox Code Playgroud)
在这个级别,每个数字固定5位的方案产生12,410,565位.净节省6,980,315位,总压缩大小现在为5,430,250位,比固定位大小的方法节省了大约56位.
随着更多价值的增加,您可以看到额外的投资回报率会迅速下降.除了前四个值之外,您不会使用此硬编码方案保存任何内容,因为每个项目的位节省为零(之后为负).真正的自适应编码可以为您带来更多节省(因为它也在优化xxxxx位),但可能并不多.
(a)根据它的外观进行非常人为的分配.每个数量大约是先前数量的一半,使得可变长度编码成为理想的解决方案.
| 归档时间: |
|
| 查看次数: |
448 次 |
| 最近记录: |