C 如何压缩大小为1024*1024*1024*4的稀疏数组

C 如何压缩大小为1024*1024*1024*4的稀疏数组,c,arrays,C,Arrays,我有一个大小为1024*1024*1024*4的稀疏数组。此数组的项为字节。因此,阵列的内存是4G。它是一个稀疏数组,即非零项仅约600M。希望能够提出一种存储结构来压缩稀疏阵列(压缩到2~3G),并具有良好的访问速度。合适的表示取决于需要对稀疏阵列执行什么操作。一般的方法是将非零项的位置及其值存储在数据结构中 一种选择是使用哈希表 enum {NumDimensons = 4}; struct ArrayLocation { int16_t location[NumDimensions];

我有一个大小为1024*1024*1024*4的稀疏数组。此数组的项为字节。因此,阵列的内存是4G。它是一个稀疏数组,即非零项仅约600M。希望能够提出一种存储结构来压缩稀疏阵列(压缩到2~3G),并具有良好的访问速度。

合适的表示取决于需要对稀疏阵列执行什么操作。一般的方法是将非零项的位置及其值存储在数据结构中

一种选择是使用哈希表

enum {NumDimensons = 4};
struct ArrayLocation {
  int16_t location[NumDimensions];
};

typedef uint8_t ArrayValue;

// Hash Table with key as ArrayLocation and value as ArrayValue

对于哈希表操作,如
get()
put()
非常简单,但迭代并不简单。如果迭代很重要,一个选择是使用二叉搜索树。

您当前的解决方案是什么样的?我将实现一个稀疏数组作为关联数组,作为哈希表。我会把索引(在你的例子中有四个)散列在一起,然后像往常一样搜索一个散列链。或者我会在“稀疏数组”上进行网络搜索,看看其他人做了什么。