【问题标题】:Mapping a 2D space of 3D volumes to 1D space (a file)将 3D 体积的 2D 空间映射到 1D 空间(文件)
【发布时间】:2012-03-28 12:34:48
【问题描述】:

我有一个由三维体积组成的二维数组。这个二维数组代表了所有三维体积的自上而下的视图。

我想将这些数据保存到一个文件中,以便我可以快速检索它。我的问题是二维数组可能会改变大小和形状;它并不总是那么漂亮和方正。这往往会留下很多未使用的部分。

我目前的检索方法是使用卷级别的 2D 视图来定位需要加载的卷,但是我很难提出一个好的数据结构和存储技术。我遇到的大多数方法都要求 2D 视图具有相同的长度和宽度,或者取决于长度或宽度。

可能值得注意的是,我想避免文件中未使用的空间,并且我还希望映射点具有良好的局部性。在映射点时,提出一个可行但产生奇怪关系的解决方案是很常见的; {0, 0} 不能映射到除 {0} 之外的任何东西,并且 {1, 0} 应该非常接近 {0} 而不是像 {34} 这样的东西。

您将如何以节省空间和时间的方式进行此操作?

【问题讨论】:

  • 但是 {0,1} 可以映射到 {34},对吧?

标签: math language-agnostic data-structures map mapping


【解决方案1】:

不久前,我通过实现一些不同的空间填充曲线并使用它们将高维数据映射和转换为单维文件来解决这个问题。我发现希尔伯特曲线非常有效。

【讨论】:

    【解决方案2】:

    所以您说的只是节省模型空间的 2d 切片,对吗?

    说实话,我认为最简单也可能是最好的做法就是保存所有内容。它使事情变得非常简单,您也可以非常轻松地找到文件中的特定位置。

    然后,使用 zlib 或 bz2 等压缩文件流。如果你有很多零,它会很好地压缩。当我开始这样做时,它加快了我的 HPC 代码速度。

    我可以想到一些更复杂的事情要做,但你真正想要实现的是什么?压缩会变小,格式简单就好了。

    【讨论】:

    • 这个想法是让搜索时间 O(1) 给定 3D 空间中的特定坐标,并从映射的 1D 文件中检索 2D 空间中的父元素。因此,该文件的布局将直接随 2D 空间内的 3D 空间布局而变化。由于我们要映射的数据类型是由 PRNG 和平滑函数生成的,因此压缩效率会很低。诀窍只是为了防止文件稀疏并促进快速搜索,因为搜索是我们生产中的瓶颈。
    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    相关资源
    最近更新 更多