2017-10-16 12 views
1

최근에 비트 패어 링 기능으로 Morton coding (Z-order curve)을 배웠습니다. Cantor pairing function과 비교하여 숫자를 쌍으로 만드는 계산 방식이 더 빠른 방법으로 나에게 소개되었습니다.상위 비트와 하위 비트로 구분하는 대신 비트 인터리빙을 사용하여 쌍 번호를 사용하는 이유는 무엇입니까?

모튼 코딩 작업은 두 비트를 인터리브하여 더 넓은 데이터 형식으로 결과를 저장하는 것입니다. 예를 들어, 두 개의 8 비트 정수의 비트를 인터리브하고 그 결과를 16 비트 정수로 저장합니다.

대상 데이터 형식의 상위 비트와 하위 비트 중 두 숫자를 나누는 대신 비트를 인터리브하려는 이유가 무엇입니까? 높은 비트와 낮은 비트를 사용하는 것이 더 빠를 것이라고 기대합니다. 언제 인터리빙에 이점이 있을까요?

답변

1

칸토어 페어링 기능과 마찬가지로 연결과 달리 좌표에 선험적 인 경계를 두지 않습니다. 즉, Morton 코딩은 임의의 길이 정수에 대해 공식화 될 수 있습니다. 연결된 것은 사실이 아닙니다. 어떤 것도 연결될 수 있지만 결과가 모호하고 해석의 원래 크기가 달라지기 때문입니다. 모호성을 피하기 위해 하나의 차원을 제외한 모든 차원의 크기를 고정해야합니다.

어쨌든 선험적 인 경계가 있고 상황이 문제가되지 않는 상황에서 사용되는 경우 물론 병합 연결은 훨씬 간단한 옵션입니다.

지역성은 일반적으로 사용되는 이점입니다. 가까이있는 두 좌표는 대부분 Z- 값의 측면에서 비교적 가까이에 매핑됩니다. Hilbert 커브는 그 목적을 위해 더 잘 작동하지만 인코딩, 디코딩 및 오프셋 (그리고 연결과 마찬가지로 사전에 고정해야하는 공간의 크기에 따라 다름)이 더 어렵습니다. 연결된 좌표는 하나의 차원에서만 (그러나 실제로는) 지역을 보존하지만 다른 차원에서는 그렇지 않지만 인코딩/디코딩/오프셋 (이 모든 것이 가능할 때, 차원을 제외한 모든 차원의 크기가 미리 결정하십시오.)