2017-10-16 122 views
1

我最近了解到Morton coding (Z-order curve)是一个按位配对函数。它被呈现给我,与Cantor pairing function相比,计算速度更快。为什么使用位交错来配对数字,而不是通过高位和低位来分隔数字?

Morton编码的工作方式是将两个数字交错,并将结果存储在更宽的数据类型中。例如,交织两个8位整数的位并将结果存储为一个16位整数。

为什么要交织位而不是在目标数据类型的高位和低位之间拆分两个数字?我希望使用高位和低位仍然更快。什么时候交错它们会有什么优势?

回答

1

与康托尔配对函数一样,不像串联一样,它没有在坐标上放置先验限制。换句话说,莫顿编码也可以用于任意长度的整数。实际上并非如此,因为虽然可以连接任何东西,但结果会不明确,其解释将取决于原始坐标的大小。除了一个维度之外的所有维度的大小必须被固定以避免模糊。

如果将它用于存在先验约束的上下文,并且局部性不是问题,那么当然级联是更简单的选项。

虽然位置是一个常用的优点。靠近的两个坐标大部分也以其Z值相对接近。希尔伯特曲线在这方面效果甚至更好,但编码,解码和偏移更困难(并且像串联,它还取决于必须事先解决的空间大小)。连接坐标只保留一个维度(但非常好)而不是其他维度的局部性,但是最容易编码/解码/偏移(当这些东西都可能时,这意味着除了一个维度之外的所有维度都必须被预先确定)。

相关问题