Яка різниця між різними кривими заповнення простору?


14

Криві заповнення місцями важливі у багатьох графічних програмах, оскільки вони допомагають розкрити просторову локальність. Ми часто чуємо про різні алгоритми, використовуючи Z-криві, коди Мортона, криві Гільберта і т. Д. Які відмінності між цими різними кривими і як вони застосовуються до різних застосувань?



Дивіться також розділ 2.1.1.2 Основи багатовимірних та метричних структур Самета .
lhf

Відповіді:


13

Різниця полягає в тому, наскільки добре картографування зберігає місцевість і наскільки легко кодувати / декодувати ключі. У статті "Лінійне скупчення об'єктів з декількома атрибутами" Х. В. Джагадіш говорить: "Через алгебраїчний аналіз та за допомогою комп'ютерного моделювання ми показали, що за більшості обставин карти Гільберта виконуються так само, як і краще, ніж найкращі альтернативні відображення, запропоновані в література ". З іншого боку, z-order є трохи простішим у використанні, наприклад, порівняйте різні методи, перелічені в Bit Twiddling Hacks для z-order та Wikipedia для Hilbert-порядку.

Що стосується програм, я думаю, що головна перевага використання кривих заповнення простору полягає в тому, що вони відображають точки з простору більш високого розміру на простір нижчої розмірності. Наприклад, вони дають можливість відкривати запит на точки, використовуючи традиційний індекс бази даних B-дерева. З іншого боку, з іншого боку, недоліком є ​​те, що потрібно знати межі введення заздалегідь, оскільки згодом важко "змінити розмір" карти.

PS: "Z-крива" - це те саме, що "код Мортона".

PPS: Додаткові відображення включають криву Peano, а про додатки див. Також Geohash .


9

Ці криві заповнення простору дозволяють зберігати місцевість у декількох вимірах, коли ви "ходите" лінійно по кривій.

З того, що я бачив, Z-Order (також відомий як код Мортона) є найбільш зайнятим через його обчислювальну вартість, яка є постійною (і дешевою) для прямого доступу до будь-якої точки кривої. (І простий у впровадженні апаратних засобів з покаранням 0 циклу, оскільки це відповідає "просто комутації" адресних проводів).

Конкретним прикладом кривої Z-порядку є завивання текстури: це в основному збільшує швидкість удару кеша для тексту, що читається на графічних процесорах. (Дивіться зображення у статті про Z-Curve https://en.wikipedia.org/wiki/Z-order_curve )

Якщо текстура просто зберігається лінійно, ви отримуєте максимальний удар у кеш, якщо ви надаєте лише текстуру як двовимірне зображення, але якщо ви повернули її на 90 градусів на екрані, ви потрапляєте в найгірший випадок (пропустіть кеш для кожної прочитаної текстури) .

Як результат, краще трохи торгуватись і знижувати найкращий сценарій справи та мати кращі результати кешу для більшості шаблонів.

Як особиста примітка, з того, що я бачив, для інших кривих може знадобитися рекурсивний крок для їх обчислення і призвести до більшої вартості, ніж Z-крива, з мінімальним посиленням в терміні узгодженості місцевості. Отже, я не чув про ті криві, які використовуються з практичною метою, за винятком предметів дослідження в математичному чи творчому / смішному візуалізації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.