使用 morton 代码压缩数据 - 如何?

Posted

技术标签:

【中文标题】使用 morton 代码压缩数据 - 如何?【英文标题】:Using morton codes to compress data - how? 【发布时间】:2014-05-03 13:11:05 【问题描述】:

我一直在阅读有关 morton 代码的内容,并且我发现位置性保留在生成的数字序列中。

我不明白这些信息如何用于压缩数据或有效地并行构造数据。

来源:http://www.forceflow.be/2013/10/07/morton-encodingdecoding-through-bit-interleaving-implementations/

【问题讨论】:

【参考方案1】:

Morton 排序本身并不与数据压缩相关。这只是一种在内存中布置空间数据的方式,这样对连续空间块的查询往往会映射到连续的内存块——从而提高缓存效率。

在您引用的链接中的algorithm paper referenced 中,莫顿命令用于提高磁盘读写效率。

该算法将复杂的三角形网格转换为高分辨率体素中间表示(按莫顿顺序存储),然后将该表示转换为稀疏(压缩)输出形式。

Morton 顺序的一个特性是它匹配从深度优先遍历八叉树(或二维四叉树)获得的顺序。这提供了输出八叉树数据结构和中间数据结构之间的方便对齐。因此,在输出八叉树中构造一个节点需要来自中间结构中一组连续索引的数据。这让算法在给定的步骤中只读取它需要的数据,从而保持低内存占用和高缓存效率。

因此,这里的 Morton 排序本身并没有提供特别的压缩或并行化优势 - 您可以编写一个等效的算法,其压缩输出与在其中间使用线性排序的压缩输出相同,但它的写入和读取会更加分散,因此它可能不会那么快地处理数据。

但是,如果您使用四叉树或八叉树来压缩数据,莫顿排序可以使您的数据索引更清晰,性能更高。

【讨论】:

以上是关于使用 morton 代码压缩数据 - 如何?的主要内容,如果未能解决你的问题,请参考以下文章

2D morton 代码编码/解码 64 位

使用 morton 代码查找最近的邻居

使用 Morton 顺序进行最近邻搜索的好处?

为 32 位、64 位和 128 位生成交错位模式(morton 密钥)

用于 3D 网格的 Morton 反向编码

2d Morton 码 64bits 解码功能