Гильберт қисығы - Hilbert curve

Гильберт қисығының алғашқы алты қайталануы

The Гильберт қисығы (деп те аталады Гильберттің кеңістікті толтыратын қисығы) Бұл үздіксіз фрактальды кеңістікті толтыратын қисық алдымен неміс математигі сипаттаған Дэвид Хилберт 1891 жылы,[1] кеңістікті толтырудың нұсқасы ретінде Пеано қисықтары ашқан Джузеппе Пеано 1890 жылы.[2]

Бұл кеңістікті толтыратындықтан, оның Хаусдорф өлшемі 2-ге тең (дәл оның кескіні - бұл кез-келген өлшем анықтамасында өлшемі 2 болатын бірлік квадрат; оның графикасы Хаусдорф өлшемі 2-мен тұйық бірлік интервалына гомеоморфты ықшам жиынтығы).

Гильберт қисығы шегі ретінде тұрғызылған сызықтық қисықтар. Ұзындығы қисық , яғни ұзындық геометриялық өседі , әр қисық ауданы бар квадратта болса да .

Суреттер

Қолданбалар және картаға түсіру алгоритмдері

Шынайы Гильберт қисығы да, оның дискреттік жуықтаулары да пайдалы, өйткені олар 1D мен 2D кеңістігі арасында картаны жақсы орналастырады, бұл жерді жақсы сақтайды.[4] Бұл бір өлшемді кеңістіктегі бір-біріне жақын екі деректер нүктелері бүктелгеннен кейін де бір-біріне жақын екенін білдіреді. Керісінше әрқашан дұрыс бола алмайды.

Осы локалды қасиет болғандықтан, Гильберт қисығы информатикада кеңінен қолданылады. Мысалы, IP мекенжайлары компьютерлерде қолданылатын суретті Гильберт қисығы арқылы бейнелеуге болады. Кескінді құру коды 2D-ден 1D-ге дейін әр пиксельдің түсін табу үшін сәйкес келеді, ал кейде Гильберт қисығы суретте жақын IP-адрестерді сақтайтындықтан қолданылады.

A сұр реңк фотосуретті а-ға ауыстыруға болады айырылған табалдырықты қолданып, әр пиксельден қалған сома Гильберт қисығы бойымен келесі пикселге қосылатын ақ-қара кескін. Мұны жасайтын код 1D-ден 2D-ге дейін салыстырылатын болады, ал кейде Гильберт қисығы көзге көрінетін тартымды заңдылықтарды жасамайтындықтан кейде қолданылады, егер тәртіп әр пиксель қатарында солдан оңға қарай орналасса. Жоғары өлшемдердегі Гильберт қисықтары - жалпылау данасы Сұр кодтар, және кейде ұқсас себептермен ұқсас мақсаттарда қолданылады. Көпөлшемді мәліметтер базасы үшін оның орнына Гильберт ретін қолдану ұсынылды Z тәртібі өйткені ол елді-мекенді сақтайтын жақсы мінез-құлыққа ие. Мысалы, Гильберт қисықтары қысу және үдеу үшін қолданылған R-ағаш индекстер[5] (қараңыз Гилберт R ағашы ). Олар сондай-ақ деректер қоймаларын қысуға көмектесу үшін қолданылған.[6][7]

Қосымшалардың алуан түрлілігін ескере отырып, екі бағытта картаға түсіру алгоритмдері болған пайдалы. Көптеген тілдерде бұл рекурсиядан гөрі итерациямен жүзеге асырылса жақсы болады. Келесісі C код салыстыруды екі бағытта да орындайды, рекурсиядан гөрі итерация мен биттік операцияларды қолданады. Ол бөлінген квадратты болжайды n арқылы n ұяшықтар, үшін n координаталары бүтін 2 болатын қуат, төменгі сол жақ бұрышта (0,0), (n − 1, n - 1) жоғарғы оң жақ бұрышта және қашықтықта г. сол жақ төменгі бұрышта 0-ден басталып, барады төменгі оң жақ бұрышта Бұл қисық жоғарғы сол жақ бұрыштан басталып, жоғарғы оң жақ бұрышта аяқталатын жоғарыда көрсетілген анимациядан өзгеше.

// (x, y) -ді d-ге түрлендіруint xy2d (int n, int х, int ж) {    int rx, ry, с, г.=0;    үшін (с=n/2; с>0; с/=2) {        rx = (х & с) > 0;        ry = (ж & с) > 0;        г. += с * с * ((3 * rx) ^ ry);        шірік(n, &х, &ж, rx, ry);    }    қайту г.;}// d-ді (x, y) -ге түрлендіружарамсыз d2xy(int n, int г., int *х, int *ж) {    int rx, ry, с, т=г.;    *х = *ж = 0;    үшін (с=1; с<n; с*=2) {        rx = 1 & (т/2);        ry = 1 & (т ^ rx);        шірік(с, х, ж, rx, ry);        *х += с * rx;        *ж += с * ry;        т /= 4;    }}// квадрантты тиісті түрде бұру / аударужарамсыз шірік(int n, int *х, int *ж, int rx, int ry) {    егер (ry == 0) {        егер (rx == 1) {            *х = n-1 - *х;            *ж = n-1 - *ж;        }        // x және y ауыстыру        int т  = *х;        *х = *ж;        *ж = т;    }}

Мұнда C шарттылықтары қолданылады: & белгісі - ЖӘНЕ, ^ белгісі - XOR, + = операторы айнымалыға қосылады, ал / = операторы айнымалыны бөледі. Бульяндармен С-да жұмыс істеу xy2d-де айнымалы болатындығын білдіреді rx битке сәйкес келу үшін 0 немесе 1 күйіне орнатылған с туралы х, және сол сияқты ry.

Xy2d функциясы ең маңызды биттерден бастап жоғарыдан төмен қарай жұмыс істейді х және ж, және ең маңызды биттерді құру г. бірінші. D2xy функциясы ең кіші биттерден бастап, керісінше тәртіпте жұмыс істейді г., және құрылыс х және ж ең аз биттерден басталады. Екі функция да айналдыру және айналдыру үшін айналу функциясын қолданады (х,ж) тиісті түрде үйлестіру жүйесі.

Екі карта алгоритмі ұқсас тәсілдермен жұмыс істейді. Квадраттың барлығы 4 аймақтан тұрады, олар 2-ден 2-ге орналастырылған. Әр аймақ 4 кішігірім аймақтан тұрады және т.с.с. деңгейлер үшін. Деңгейде с, әр аймақ с арқылы с жасушалар. Деңгейлер арқылы қайталанатын бір FOR циклі бар. Әрбір қайталануда сома қосылады г. немесе х және ж, 4 аймақтың қайсысында тұрғандығымен анықталады. Ағымдағы төрт аймақ (rx,ry), қайда rx және ry әрқайсысы 0 немесе 1-ге тең, сондықтан ол 2 кіріс битін жұмсайды (немесе 2-ден г. немесе әрқайсысы 1-ден х және ж), және екі бит шығарады. Ол сонымен қатар айналу функциясын (х,ж) келесі деңгейге, келесі қайталауға сәйкес болады. Xy2d үшін ол бүкіл квадраттың жоғарғы деңгейінен басталып, жеке ұяшықтардың ең төменгі деңгейіне дейін жүреді. D2xy үшін ол төменгі бөліктен ұяшықтардан басталып, бүкіл квадратты қамтуға дейін жұмыс істейді.

Деректер кеңістігі квадрат құрамаған кезде де Гильберт қисықтарын тиімді түрде жүзеге асыруға болады.[8] Сонымен қатар, Гильберт қисықтарының үлкен өлшемдерге бірнеше жалпылауы болуы мүмкін.[9][10]

Lindenmayer жүйесі ретінде ұсыну

Гильберт қисығын а арқылы өрнектеуге болады жүйені қайта жазу (L жүйесі ).

Алтыншы қайталану кезіндегі Гильберт қисығы
Әліппе : A, B
Тұрақты : F + -
Аксиома : A
Өндіріс ережелері:
A → + BF − AFA − FB +
B → −AF + BFB + FA−

Мұнда «F» «алға қарай созу», «+» «90 ° солға бұрылу», «-» «90 ° оңға бұрылу» дегенді білдіреді (қараңыз) тасбақа графикасы ), және сурет салу кезінде «А» және «В» еленбейді.

Басқа бағдарламалар

Графикалық асыл тастар II[11] қисық қисықтықтың келісімділігін талқылайды және іске асыруды қамтамасыз етеді.

Гильберт қисығы әдетте қолданылады көрсету кескіндер немесе бейнелер. Сияқты жалпы бағдарламалар Блендер және 4D кинотеатры объектілерді қадағалау және көріністі көрсету үшін Гильберт қисығын пайдаланыңыз.

Сондай-ақ қараңыз

Ескертулер

  1. ^ Д. Хильберт: Егер сіз Abbildung einer Linie auf ein Flächenstück болып табылсаңыз. Mathematische Annalen 38 (1891), 459–460.
  2. ^ Г.Пеано: Sur une courbe, qui remplit toute une aire ұшағы. Mathematische Annalen 36 (1890), 157–160.
  3. ^ Буржес, Паскаль. «Chapitre 1: фракталдар ", Fractales және хаос. Қол жеткізілді: 9 ақпан 2019.
  4. ^ Ай, Б .; Джагадиш, Х.В .; Фалоутос, С .; Сальц, Дж. (2001), «Гильберттің кеңістікті толтыратын қисығының кластерлік қасиеттерін талдау», IEEE транзакциясы бойынша білім және деректерді жобалау, 13 (1): 124–141, CiteSeerX  10.1.1.552.6697, дои:10.1109/69.908985.
  5. ^ I. Kamel, C. Faloutsos, Hilbert R ағашы: Фракталдарды қолданып жетілдірілген R ағашы, in: Өте үлкен мәліметтер базасына арналған 20-шы халықаралық конференция материалдары, Morgan Kaufmann Publishers Inc., Сан-Франциско, Калифорния, АҚШ, 1994, 500-509 бет.
  6. ^ Эвис, Т .; Cueva, D. (2007). Деректер қоймасы орталарына арналған кеңістікті қысу архитектурасы Гильберт. Информатика пәнінен дәрістер. 4654. 1-12 бет. дои:10.1007/978-3-540-74553-2_1. ISBN  978-3-540-74552-5.
  7. ^ Лемир, Даниел; Касер, Оуэн (2011). «Кішірек индекстер үшін бағандарды қайта реттеу». Ақпараттық ғылымдар. 181 (12): 2550–2570. arXiv:0909.1346. дои:10.1016 / j.ins.2011.02.002. S2CID  15253857.
  8. ^ Гамильтон, C. Х .; Рау-Чаплин, А. (2007). «Гильберттің ықшам индекстері: ұзындығы тең емес домендерге арналған кеңістікті толтыратын қисықтар». Ақпаратты өңдеу хаттары. 105 (5): 155–163. дои:10.1016 / j.ipl.2007.08.034.
  9. ^ Альбер, Дж .; Niedermeier, R. (2000). «Гильберт қасиеті бар көп өлшемді қисықтарда». Есептеу жүйелерінің теориясы. 33 (4): 295–312. CiteSeerX  10.1.1.7.2039. дои:10.1007 / s002240010003. S2CID  788382.
  10. ^ H. J. Haverkort, F. van Walderveen, R-ағаштарына арналған төрт өлшемді Гильберт қисықтары, in: Algorithm Engineering and Experiments on Eleining Workshop of Workshop, 2009, 63-73 беттер.
  11. ^ Фурхиес, Дуглас: кеңістікті толтыратын қисықтар және келісімділік өлшемі, 26-30 б., Графикалық асыл тастар II.

Әрі қарай оқу

Сыртқы сілтемелер