稀疏多维数组占用大量空间 - HashTable更好?

时间:2015-02-19 13:39:52

标签: c multidimensional-array heap hashtable space-complexity

是否有更好的方法来使用多维数组来计算要在表格中显示的值。请注意,阵列的每个维度都很大但很稀疏。可以考虑像HashTable这样的东西吗?

计算后的输出表如下所示

Output Table after the computations

2 个答案:

答案 0 :(得分:1)

这个答案已经过时,因为OP添加了信息,数据是稀疏矩阵


不是真的。也许是一维数组(会保存指向维度的指针 - 但这是错误的...毫无意义)。

数组是具有最少元数据的数据结构(因为根本没有元数据)。因此,如果您确实需要将所有数据存储在内存中,那么您的方法无法进行太多优化。

任何其他数据结构(树,链接列表等)都将包含额外的元数据,因此会占用更多内存。

使用更少内存的唯一方法是实际使用更少的内存(通过仅将数据加载到您真正需要的内存中,将其余内容保留在硬盘驱动器上或其他任何内容)。

您想要显示一个表,所以也许您可以将在内存中保存的行限制为比表的视口稍大的区域(这样您就可以流畅地滚动表格)。然后,您可以根据表的滚动状态动态计算和覆盖行。

答案 1 :(得分:0)

管理sparse matrix的内存有多种不同的方法。我首先定义一个结构来在矩阵中保存单个条目

struct sparse_matrix_data{
    int i;
    int j;
    int /* or double or whatever */ value;
};

以便存储两个索引和每个非零条目的值。从那里,您需要确定哪种数据结构最适合您需要执行的计算:一个或两个索引上的哈希表,这些结构的数组,链表,......

请注意,如果存储索引所需的额外内存小于用于在原始多维数组中存储零的内存,则这只会减少所需的内存。