压缩16位整数的短序列

时间:2017-07-14 15:13:16

标签: arrays integer compression lossless-compression

我必须压缩一组包含9个16位有符号整数的8个列表,例如:

a = [1 2 3 4 5 6 7 8 9]

b = [10 11 12 13 14 15 16 17 18]

c = [19 20 21 22 23 24 25 26 27]

d = [28 29 30 31 32 33 34 35 36 37 38]

e = ...

我们无法控制数字来源,但我做了一些分析,我们发现通常12-18%的数字是0,而85-90%的数字可以用4位表示或更少。大约99%可以用8位表示。数字平均分布在0左右。

数据将被打包成一个共享的固定大小结构,这意味着最终我们将拥有

的sizeof(a_compressed)==的sizeof(b_compressed)==的sizeof(c_compressed)==的sizeof(d_compressed)= ...

使最坏的情况占主导地位

每个列表必须独立于其他列表(例如,我不需要访问a以便读取b)但是它们可以(可选地)在独立的共享数据结构x中共享额外信息。

压缩的计算成本无关紧要。对于解压缩,它不是一个关键参数,但是如果不是必须读取整个列表以便解压缩它将是值得赞赏的。已知数据访问是顺序的(我们将读取c [0],然后是c [1],c [2] ...)

到目前为止,我用这个算法获得了最好的结果:   - 寻找4个阵列的最高绝对值   - 获取表示它所需的位数   - 使用此位精度对所有数字进行编码   - 存储连续解压缩的位精度

结果,我们在53.5位/列表

的数据集中得到了最坏的情况

我希望我提供了足够的信息......谢谢!

0 个答案:

没有答案