2017-10-16 15 views
1

私は最近、ビットワイズペアリング機能としてMorton coding (Z-order curve)を学びました。それはCantor pairing functionと比較して数値を組み合わせる計算上高速な方法として私に提示されました。なぜビット数が上位ビットと下位ビットで区切られるのではなく、ビットインターリーブを使用してペアになるのですか?

モートンの符号化の仕方は、ビットをインタリーブして結果をより広いデータ型に格納することによって2つの数を結合することです。たとえば、2つの8ビット整数のビットをインターリーブし、その結果を16ビット整数として格納します。

なぜターゲットデータ型の上位ビットと下位ビットの間で2つの数値を分割するのではなく、ビットをインターリーブしたいのですか?私は高速と低ビットを使用してより高速になることが期待されます。インターリーブに利点があるのはいつですか?

答えて

1

カントールのペアリング機能と同様に、連結とは異なり、座標に先験的な境界を設定しません。つまり、モートン符号化は、任意の長さの整数に対しても定式化することができる。実際に連結の場合はそうではありません。連結できるものはありますが、その結果はあいまいで、その解釈は元の座標のサイズに依存するためです。あいまいさを避けるために、1次元以外のすべてのサイズを固定する必要があります。

とにかく先験的な拘束がある場所で使用され、地域性は問題ではない場合、コースの連結はさらに簡単なオプションです。

ローカリティはよく使用される利点です。近くにある2つの座標は、そのZ値に関しても比較的近くにマップされています。ヒルベルト曲線はその目的のためにはさらに良く機能しますが、エンコード、デコード、オフセットすることは難しくなります(連結のように、あらかじめ固定しなければならないスペースのサイズにも依存します)。連結された座標は、1つの次元(しかし、本当にうまくいく)で局所性を保持し、他のものではなく、エンコード/デコード/オフセットするのが最も簡単です(これらはすべて可能です。予め決めておく)。

関連する問題