稀疏多维数组占用巨大 space - HashTable 更好?
Sparse Multidimensional Array taking huge space - HashTable better?
是否有更好的方法来使用多维数组来计算要在 table 中显示的值。请注意数组的每个维度都很大但很稀疏。可以考虑像 HashTable 这样的东西吗?
计算后的输出Table如下所示
这个答案已经过时了,因为 OP 添加了数据是稀疏矩阵的信息
不是真的。也许是一维数组(会保存指向维度的指针 - 但这是错误的......毫无意义)。
数组是元数据最少的数据结构(因为根本没有元数据)。所以如果你真的需要将所有数据存储在内存中,你的方法就不能优化太多。
任何其他数据结构(树、链表等)都将包含额外的元数据,因此会消耗更多内存。
使用更少内存的唯一方法是实际 使用更少 内存(只将数据加载到您真正需要的内存中,其余的留在硬盘上或随便)。
您想显示一个 table,因此也许您可以将保存在内存中的行限制在比 table 的视口稍大的区域(这样您就可以滚动 table 流利)。然后你可以根据 table.
的滚动状态动态计算和覆盖行
有许多不同的方法来管理 sparse matrix 的内存。我会首先定义一个结构来保存矩阵中的单个条目
struct sparse_matrix_data{
int i;
int j;
int /* or double or whatever */ value;
};
以便您存储两个索引和每个非零条目的值。从那里,您需要决定哪种数据结构最适合您需要执行的计算:对一个或两个索引进行哈希 table、这些结构的数组、链表、...
请注意,如果存储索引所需的额外内存少于用于存储原始多维数组中的零的内存,这只会减少所需的内存。
是否有更好的方法来使用多维数组来计算要在 table 中显示的值。请注意数组的每个维度都很大但很稀疏。可以考虑像 HashTable 这样的东西吗?
计算后的输出Table如下所示
这个答案已经过时了,因为 OP 添加了数据是稀疏矩阵的信息
不是真的。也许是一维数组(会保存指向维度的指针 - 但这是错误的......毫无意义)。
数组是元数据最少的数据结构(因为根本没有元数据)。所以如果你真的需要将所有数据存储在内存中,你的方法就不能优化太多。
任何其他数据结构(树、链表等)都将包含额外的元数据,因此会消耗更多内存。
使用更少内存的唯一方法是实际 使用更少 内存(只将数据加载到您真正需要的内存中,其余的留在硬盘上或随便)。
您想显示一个 table,因此也许您可以将保存在内存中的行限制在比 table 的视口稍大的区域(这样您就可以滚动 table 流利)。然后你可以根据 table.
的滚动状态动态计算和覆盖行有许多不同的方法来管理 sparse matrix 的内存。我会首先定义一个结构来保存矩阵中的单个条目
struct sparse_matrix_data{
int i;
int j;
int /* or double or whatever */ value;
};
以便您存储两个索引和每个非零条目的值。从那里,您需要决定哪种数据结构最适合您需要执行的计算:对一个或两个索引进行哈希 table、这些结构的数组、链表、...
请注意,如果存储索引所需的额外内存少于用于存储原始多维数组中的零的内存,这只会减少所需的内存。