我正在使用非常大的Int列表(可能很大)在 Scala 上工作,我需要压缩它们并将其保存在内存中。
唯一的要求是我可以提取(并解压缩)列表中的第一个数字以使用,而无需触及列表的其余部分。
我有很多好主意,但其中大多数将数字转换为位。例子:
您可以将任意数字x写为元组 |log(x)|,x-|log(x)| 第一个元素,我们将它作为一个字符串 1 和一个 0 在末尾(一元代码)和二进制中的第二个元素。例如:
1 -> 0,1 -> 0 1
...
5 -> 2,1 -> 110 01
...
8 -> 3,0 -> 1110 000
9 -> 3,1 -> 1110 001
...
虽然 Int 占用固定的 32 位内存和长 64 位,但通过这种压缩,x需要2log(x)位进行存储,并且可以无限增长。在大多数情况下,这种压缩确实会减少内存。
您将如何处理此类数据?是否有诸如位数组之类的东西?
在 Scala 中压缩此类数据的任何其他方式?
谢谢