为什么使用位交错而不是用高位和低位分隔数字?

时间:2017-10-16 18:43:33

标签: bit-manipulation bit

我最近了解到Morton coding (Z-order curve)作为按位配对功能。与Cantor pairing function相比,它作为计算速度更快的方式呈现给我。

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

为什么要交换位而不是在目标数据类型的高位和低位之间拆分两个数字?我希望使用高位和低位更快。何时交错可能有优势?

1 个答案:

答案 0 :(得分:1)

与Cantor配对功能类似,与连接不同,它不会在坐标上放置先验界限。换句话说,莫顿编码也可以用于任意长度的整数。实际上并不是连接的情况,因为虽然任何东西都可以连接,但结果将是模糊的,其解释将取决于坐标的原始大小。除了一个维度之外的所有维度的大小都必须固定,以避免歧义。

如果它在无论如何都存在先验条件的上下文中使用,并且局部性不是问题,那么当然连接是一个更简单的选项。

虽然地方性是一个常用的优势。靠近的两个坐标大部分也根据它们的Z值相对靠近地映射。希尔伯特曲线为此目的更好地工作,但是更难编码,解码和偏移(并且像连接一样,它还取决于必须事先修复的空间大小)。连接坐标仅在一个维度(但非常好)中保留局部性,而不是其他维度,但是最容易编码/解码/偏移(当这些事情完全可能时,这意味着除了一个维度之外的所有维度都必须预定的。)