如何在3D表示中有效地存储大量但非常稀疏的数据量?

时间:2014-08-07 20:04:49

标签: arrays 3d linked-list sparse-matrix large-data-volumes

我在处理的代码中遇到了这个问题:我需要能够在RAM中存储大量数据,并且能够使用三个整数i,j,k(类似于x, y,z坐标)。

问题在于,如果我尝试使用3D数组,那么即使是简单的数据集也会表示为:

56000^3 bytes = 185000 GB        (where  0 <= i,j,k < 56000)

185 TB 是一个不合理的数据量,我将使用它的问题可能远大于56000。

要解决这个问题,我想利用这个数组稀疏的事实,实际上,它中只有56 KB的数据(对于上面的简单示例) )。

我正在考虑使用3D链接列表来解决这个问题。这将保证所需的RAM将达到100 KB的数量级。我从在线查看的另一个页面中得到了这个想法,基本上我需要做的就是:

List <List <List <nodes>>>       (where each list takes an i, j, or k index)

但在我花几个小时编写自定义链表解决方案之前,我想知道是否有人有更好的建议存储稀疏数据集?问题是每个节点必须采用3个索引i,j,k。

感谢您的帮助和建议! :)

1 个答案:

答案 0 :(得分:2)

像......这样的字典呢?

class vector3(){
int x,y,z;
}
Dictionary<vector3,object>