处理大量整数的最佳方法

时间:2010-02-06 12:15:54

标签: c# xml compression integer

我有一个大约10-100k整数的数组,我需要存储(尽可能压缩),并尽可能快地检索完整的数组。使用c#等语言处理此类事物的最佳方法是什么。

4 个答案:

答案 0 :(得分:6)

这取决于“尽可能压缩”的含义。

您可以使用BinaryWriter将整数写入流,或使用BitConverter.GetBytes将每个int作为四个字节复制到一个大型数组中。要么存储每个int而没有任何额外的元数据。

如果你想要比它更压缩,BinaryWriter有一个Write7BitEncodedInt方法,用较小的字节写入小值的整数。您还可以使用GZipStream类在将数据打包到字节数组中后尝试进一步压缩数据。

通常,您想要的越小,处理所需的时间就越长。为了在你想要的速度和尺寸之间取得平衡,你只需要进行一些测试。

答案 1 :(得分:2)

根据此int数组中值的性质,运行长度编码可能是另一种选择。也就是说,如果数组中的连续单元格都具有相同的值,则只需要在该序列中存储第一次出现的值,以及之后重复的次数。对于“稀疏”数据,这可能特别有效。

答案 2 :(得分:2)

100,000英镑不是那么大,你为什么需要这么压缩呢?

答案 3 :(得分:2)

回答您的具体问题

  1. 选择足够大且仅足够大的数据类型来存储您的数据 - 例如,uint32_t或int64_t。注意: 是固定长度。
  2. 以二进制形式将数据写入 - 背对背 - 文件。
  3. 将数据直接读回数据类型的内存。
  4. 以最佳方式解决问题。如果您想要磁盘压缩,请通过压缩库运行数据。在您尝试使用时将数据压缩在内存中通常是禁止的(通用解决方案使用其他技术)。请说明您是否想要了解为什么禁止使用。

    使用大型数据集进行计算的一般答案

    专业数学图书馆处理这些问题(例如,octave或matlab),特别是处理比您计算机可能想到的更多数字的问题。

    这些库具有执行引擎和特定语言,但您通常可以通过编程方式与它们进行交互。