我有一个大约10-100k整数的数组,我需要存储(尽可能压缩),并尽可能快地检索完整的数组。使用c#等语言处理此类事物的最佳方法是什么。
答案 0 :(得分:6)
这取决于“尽可能压缩”的含义。
您可以使用BinaryWriter将整数写入流,或使用BitConverter.GetBytes将每个int作为四个字节复制到一个大型数组中。要么存储每个int而没有任何额外的元数据。
如果你想要比它更压缩,BinaryWriter有一个Write7BitEncodedInt方法,用较小的字节写入小值的整数。您还可以使用GZipStream类在将数据打包到字节数组中后尝试进一步压缩数据。
通常,您想要的越小,处理所需的时间就越长。为了在你想要的速度和尺寸之间取得平衡,你只需要进行一些测试。
答案 1 :(得分:2)
根据此int
数组中值的性质,运行长度编码可能是另一种选择。也就是说,如果数组中的连续单元格都具有相同的值,则只需要在该序列中存储第一次出现的值,以及之后重复的次数。对于“稀疏”数据,这可能特别有效。
答案 2 :(得分:2)
100,000英镑不是那么大,你为什么需要这么压缩呢?
答案 3 :(得分:2)
回答您的具体问题
以最佳方式解决问题。如果您想要磁盘压缩,请通过压缩库运行数据。在您尝试使用时将数据压缩在内存中通常是禁止的(通用解决方案使用其他技术)。请说明您是否想要了解为什么禁止使用。
使用大型数据集进行计算的一般答案
专业数学图书馆处理这些问题(例如,octave或matlab),特别是处理比您计算机可能想到的更多数字的问题。
这些库具有执行引擎和特定语言,但您通常可以通过编程方式与它们进行交互。