【发布时间】:2015-08-08 23:45:41
【问题描述】:
我正在做一个项目,我有一个数字序列(大约 20 亿)。每个数字是 4 个字节并且是唯一的。数字是排序的。我的目标是以未压缩格式尽快将它们读入 RAM。它不关心硬盘空间。
如果我未压缩存储它们,我需要 20 亿 * 4 字节 = 8GB。这将需要大约 100 秒的时间来阅读。我可以将数据存储为位序列,这将需要 20 亿/8 = 250MB。这将需要大约 3 秒的时间来阅读。
我需要使用普通硬盘在 0.1-0.5 秒(如果可能)内读取并解压缩它们。我不在乎压缩数据需要多长时间,但我真的很关心解压缩它们需要多长时间,我需要在几毫秒内完成。
数字的随机性未知。
问题是:使用 i3-i5 CPU,什么样的压缩算法可以将数字压缩到 20-30MB 左右,解压时间为 100-200 毫秒?
编辑:序列的最大数量为 20 亿。这就是为什么我可以将它存储在一个大小为 250MB 的位数组中。序列的大小并不总是 20 亿。它可以包含 1 到 2.000.000.000 个数字。
【问题讨论】:
-
在不了解数字统计数据的情况下,您将得到的答案只是人们告诉您尝试这个库或那个库的随机猜测。这些数字是独一无二的,因此您可能无法直接使用它们。您必须首先在数据中找到一些冗余。例如,您是否分析了序号差异的统计数据,以尝试对这些差异进行差分编码器?
-
@dpmcmlxxvi:对于一个词,我存储了该词出现的句子数。
-
你是如何从 8GB 到 250MB 的? 4 字节数字(大概是整数?)和“位序列”之间的编码有何不同?
-
@mhum:我不明白你的意思……你能改写一下吗?
-
@AlgoCoder:在您的问题中,您说如果将数据存储为位序列,则需要 250MB。我不确定您所说的“将数据存储为位序列”是什么意思。
标签: algorithm compression