arrays - 如何以 3D 表示形式有效存储大量但极其稀疏的数据?

标签 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。

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

最佳答案

像这样的字典怎么样?

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

关于arrays - 如何以 3D 表示形式有效存储大量但极其稀疏的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191263/

相关文章:

c++ - std::vector 实现是否使用内部数组或链表或其他?

3d - 我可以为 SceneKit 使用哪些 3d 建模程序?

c++ - OpenGL 冒名顶替者球体 : problem when calculating the depth value

java - LinkedList的实现方式,Java

python - 反转链表并像原来一样显示它

c#计算数组内的整数

arrays - Mongodb 根据另一个数组元素过滤数组

c# - 将 Javascript 对象传递给 C#

3d - 有什么好的工具可以为大数据制作 3D 数据可视化?

c - 为什么这个 C 代码不起作用?