整数的最佳压缩算法是什么?



我想要一组随机数的最佳压缩算法。

列表的例子:

224.19
225.57
226.09
222.74
222.20
222.11
223.14
540.56
538.96
540.14
540.44
336.45
338.47
340.78
156.73
160.02
158.56
156.23
55.08
56.33
54.88
53.45

我可以跳过小数部分。我有一个巨大的数字列表,就像上面给出的例子,这就是为什么它需要被压缩。

你能推荐一些吗?

不要使用浮点数,如果需要,可以使用带有某种控制字符的整数来表示小数点,但如果可以跳过它,那就更好了。

看一下可变字节编码。它的优点是不需要为小整数分配64位内存。

如果你的数字之间有一些依赖关系,你可以看看增量编码-它存储两个数字之间的差异,而不是数字本身。

可变字节编码和增量编码是Google和其他与搜索引擎打交道的公司压缩倒排表索引的核心方法。

正如评论中所指出的,你的数字远非随机的。

我将首先删除小数点,因为看起来你所有的数字都可以用小数点后的两位数字来描述。所以只要在压缩时将所有数字乘以100,在解压缩时将所有数字除以100。

其次,我将通过从每个数字中减去最后一个数字来对数字进行增量编码。第一个数字不变。重建是显而易见的。最后是:

22419, 138, 52, -335, -54, -9, 103, 31742, -160, 118, 30, -20399,
202, 231, -18405, 329, -146, -233, -10115, 125, -145, -143

代码。现在我们有点进展了。我们有典型的小增量,偶尔有大的跳跃。然后使用可变长度的整数对它们进行编码。然后,delta的直方图将有助于很好地构建代码。一个简单的例子是每字节7位,高位是1,表示整数的结束。根据概率分布,位级上更复杂的方案可能是更理想的。

最新更新