K-d ағашы - K-d tree

к-d ағаш
ТүріКөпөлшемді BST
Ойлап тапты1975
Ойлап тапқанДжон Луи Бентли
Уақыттың күрделілігі жылы үлкен O белгісі
АлгоритмОрташаЕң нашар жағдай
Ғарыш
Іздеу
Кірістіру
Жою
3-өлшемді к-d ағаш. Бірінші бөліну (қызыл тік жазықтық) тамыр жасушасын (ақ) екі ішкі жасушаға кеседі, олардың әрқайсысы (жасыл көлденең жазықтықтармен) екі ішкі жасушаға бөлінеді. Ақырында, төрт ұяшық (төрт тік тік жазықтықта) екі ішкі жасушаға бөлінеді. Бөліну болмағандықтан, соңғы сегіздік жапырақ жасушалары деп аталады.

Жылы Информатика, а к-d ағаш (қысқаша k өлшемді ағаш ) Бұл кеңістікті бөлу мәліметтер құрылымы ұйымдастыру үшін ұпай ішінде к-өлшемді ғарыш. к-d ағаштары - бұл бірнеше қосымшалар үшін пайдалы деректер құрылымы, мысалы, көп өлшемді іздеу кілтін қамтитын іздеу (мысалы: ауқымды іздеу және жақын көршілер іздейді ). к-d ағаштары ерекше жағдай болып табылады екілік кеңістікті бөлу ағаштар.

Ресми емес сипаттама

The к-d ағашы - бұл екілік ағаш онда әрқайсысы жапырақ түйіні - а к-өлшемдік нүкте. Кез-келген жапырақсыз түйінді бөлінуді тудыратын деп санауға болады гиперплан кеңістігін екіге бөлетін, белгілі жартылай бос орындар. Осы гиперпланның сол жағындағы нүктелер сол түйіннің сол жақ ағашымен, ал гиперпланның оң жағындағы нүктелер оң жақ ағашпен ұсынылған. Гиперпланның бағыты келесі жолмен таңдалады: ағаштағы барлық түйіндер біреуімен байланысты к өлшемдер, гиперплан жазықтықтың осіне перпендикуляр. Мәселен, мысалы, егер белгілі бір сплит үшін «х» осі таңдалса, сол жақ ағашта түйінге қарағанда кіші «х» мәні бар кіші ағаштағы барлық нүктелер пайда болады және «х» мәнінен үлкен барлық нүктелер болады. оң жақ ағашта. Мұндай жағдайда гиперпланды нүктенің х мәні және оның мәні қояды қалыпты х осі бірлігі болады.[1]

Операциялар к-d ағаштар

Құрылыс

Ось бойынша тураланған бөлу жазықтықтарын таңдаудың көптеген тәсілдері болғандықтан, оларды тұрғызудың әр түрлі тәсілдері бар к-d ағаштар. Канондық әдісі к-d ағаш салу келесі шектеулерге ие:[2]

  • Ағаштан төмен қарай жылжу кезінде бөлу жазықтықтарын таңдау үшін қолданылатын осьтер бойынша циклдар жүреді. (Мысалы, 3 өлшемді ағашта тамырдың ан болады х- тегістелген жазықтық, тамырдың балалары екеуінде болады ж- тегістелген ұшақтар, тамырдың немерелері бәріне ие болар еді з-тураланған ұшақтар, тамырдың шөберелері бәріне ие болар еді х-тураланған ұшақтар, тамырдың шөберелері бәріне ие болар еді ж-тураланған ұшақтар және т.б.)
  • Ұпайлар таңдау арқылы енгізіледі медиана қойылатын нүктелердің кіші ағаш, бөлу жазықтығын құру үшін қолданылатын осьтегі олардың координаттарына қатысты. (Біз барлық жиынтығын тамақтандырамыз деген болжамға назар аударыңыз n Алгоритмге сілтеме жасайды.)

Бұл әдіс а теңдестірілген к-d ағаш, онда әр жапырақ түйіні тамырдан шамамен бірдей қашықтықта орналасқан. Алайда теңдестірілген ағаштар барлық қолдану үшін оңтайлы бола бермейді.

Олай емес екенін ескеріңіз қажет медианалық нүктені таңдау үшін Орташа нүктелер таңдалмаған жағдайда, ағаштың теңдестірілгендігіне кепілдік жоқ. Кешенді кодтауды болдырмау үшін O (n) медианалық анықтау алгоритм[3][4] немесе O (n журнал n) сияқты сұрыптау үйіндісі немесе mergesort бәрін сұрыптау n ұпай, танымал тәжірибе - сұрыптау тұрақты саны кездейсоқ таңдалған бөлу жазықтығы ретінде қызмет ету үшін осы нүктелердің медианасын пайдаланыңыз. Іс жүзінде бұл әдіс көбінесе теңдестірілген ағаштарға әкеледі.

Тізімі берілген n Келесі алгоритмде теңдестірілген құру үшін медианалық сұрыптау қолданылады ксол нүктелерден тұратын ағаш ағашы.

функциясы kdtree (ұпайлар тізімі pointList, int тереңдік) { // ось барлық жарамды мәндер бойынша айналатындай етіп тереңдікті негізге ала отырып таңдаңыз    var int ось: = тереңдік мод к; // Нүктелік тізімді сұрыптап, айналдыру элементі ретінде медиананы таңдаңыз    таңдаңыз медиана арқылы ось бастап нүкте тізімі; // Түйінді құру және кіші ағашты құру    node.location: = медиана; node.leftChild: = kdtree (ұпайлар) жылы нүкте тізімі бұрын медиана, тереңдік + 1); node.rightChild: = kdtree (ұпайлар жылы нүкте тізімі кейін медиана, тереңдік + 1); қайту түйін;}

Медианаға «кейін» нүктелерге медианадан қатаң үлкенірек нүктелер ғана енетіні жиі кездеседі. Медианаға жататын нүктелер үшін барлық өлшемдердегі нүктелерді салыстыратын «супер кілт» функциясын анықтауға болады[секвитурлық емес ]. Кейбір жағдайларда медианаға тең нүктелерді медиананың бір жағында жатуға рұқсат етіледі, мысалы, нүктелерді «кіші» кіші және «үлкен немесе тең» жиынға бөлу арқылы.

Мысал енгізу

Жоғарыда көрсетілген алгоритм Python бағдарламалау тілі келесідей:

бастап коллекциялар импорт аталғанбастап оператор импорт петчеттербастап pprint импорт пішімсынып Түйін(аталған(«Түйін», «сол жақтағы бала оң және бала»)):    деф __repr__(өзіндік):        қайту пішім(кортеж(өзіндік))деф kdtree(нүкте_тізімі, тереңдік: int = 0):    егер емес нүкте_тізімі:        қайту Жоқ    к = лен(нүкте_тізімі[0])  # барлық нүктелердің өлшемдері бірдей деп санайды    # Ось барлық терең мәндер бойынша айналатындай етіп тереңдікті ескере отырып таңдаңыз    ось = тереңдік % к    # Нүктелер тізімін осі бойынша сұрыптаңыз және айналдыру элементі ретінде медиананы таңдаңыз    нүкте_тізімі.сұрыптау(кілт=петчеттер(ось))    медиана = лен(нүкте_тізімі) // 2    # Түйінді құрып, кіші ағаштарды тұрғыз    қайту Түйін(        орналасқан жері=нүкте_тізімі[медиана],        сол_бала=kdtree(нүкте_тізімі[:медиана], тереңдік + 1),        оң_бала=kdtree(нүкте_тізімі[медиана + 1 :], тереңдік + 1),    )деф негізгі():    «» «Мысалы қолдану» «»    нүкте_тізімі = [(7, 2), (5, 4), (9, 6), (4, 7), (8, 1), (2, 3)]    ағаш = kdtree(нүкте_тізімі)    басып шығару(ағаш)егер __ аты__ == «__ная__»:    негізгі()

Шығарылым:

((7, 2), ((5, 4), ((2, 3), Ешқайсысы, Ешқандай), ((4, 7), Ешқайсысы, Ешқайсысы)), ((9, 6), ((8, 1), жоқ, жоқ), жоқ))

Жасалған ағаш төменде көрсетілген.

кнүкте жиынтығына арналған ағаштың ыдырауы
(2,3), (5,4), (9,6), (4,7), (8,1), (7,2).
Нәтижесінде к-d ағаш.

Бұл алгоритм өзгермейтін кез келген түйін үшін сол жақтағы барлық түйіндер кіші ағаш бөлінудің бір жағында орналасқан ұшақ, ал оң жақ тармақтағы барлық түйіндер екінші жағында орналасқан. Бөлінетін жазықтықта жатқан нүктелер екі жағында да пайда болуы мүмкін. Түйіннің бөліну жазықтығы сол түйінге байланысты нүктеден өтеді (кодта осылай аталады) түйін. орналасу).

Теңдестірілген құрудың балама алгоритмдері к-d ағаш ағашты салмас бұрын деректерді алдын-ала сұрыптаңыз. Содан кейін, олар ағаш салу кезінде пророрт тәртібін сақтайды және демек, бөлудің әр деңгейінде медиананы іздеудің қымбат қадамын жояды. Осындай екі алгоритм теңгерімді құрайды к-d ағаш орындалу уақытын жақсарту мақсатында үшбұрыштарды сұрыптау сәулелік бақылау үш өлшемді үшін компьютерлік графика. Бұл алгоритмдер алдын-ала жасалған n құруға дейінгі үшбұрыштар к-d ағаш, содан кейін ағашты салыңыз O (n журнал n) ең жақсы жағдайда уақыт.[5][6] Теңгерімді құратын алгоритм к-d ағаш нүктелерді сұрыптаудың ең нашар күрделілігі бар O (кн журнал n).[7] Бұл алгоритм қолдайды n әрқайсысында ұпай к өлшемдерін пайдалану O (n журнал n) сияқты сұрыптау Heapsort немесе Mergesort ағаш салу алдында. Содан кейін осылардың ретін сақтайды к ағаш салу кезінде сақтайды және сол арқылы бөлудің әр деңгейінде медиананы табудан аулақ болады.

Элементтер қосу

Біреуі а-ға жаңа тармақ қосады к-d ағашы екіншісіне элемент қосатын сияқты іздеу ағашы. Алдымен, ағашты тамырдан бастап, енгізілетін нүктенің бөліну жазықтығының «сол жағында» немесе «оң жағында» тұрғанына байланысты солға немесе оңға қарай жылжытыңыз. Бала орналасуы керек түйінге жеткен соң, жаңа нүктені жапырақ түйінінің сол немесе оң жақ қосындысы ретінде қосыңыз, қайтадан түйіннің бөліну жазықтығының қай жағында жаңа түйін бар екеніне байланысты.

Ұпайларды осылайша қосу ағаштың тепе-теңдігінің бұзылуына әкелуі мүмкін, бұл ағаштың өнімділігінің төмендеуіне әкеледі. Ағаштың жұмысының нашарлау жылдамдығы ағаш нүктелерінің кеңістіктегі үлестірілуіне және ағаштың өлшеміне қатысты қосылатын нүктелер санына байланысты. Егер ағаш тым теңгерімсіз болып қалса, жақын тепе-теңдікті іздеу сияқты ағаш теңгеріміне негізделген сұраныстардың өнімділігін қалпына келтіру үшін оны қайта теңдестіру қажет болуы мүмкін.

Элементтерді жою

Бұрыннан нүктені алып тастау үшін к-d ағашы, инвариантты бұзбай-ақ, ең оңай жолы - мақсатты түйіннің балаларынан барлық түйіндер мен жапырақтар жиынын құру және ағаштың сол бөлігін қайта құру.

Тағы бір тәсіл - жойылған нүктенің орнын табу.[8] Алдымен жойылатын нүктесі бар R түйінін табыңыз. R - жапырақ түйіні болатын негізгі жағдай үшін ауыстыру қажет емес. Жалпы жағдай үшін R-де орналасқан тамыр ағашынан ауыстыру нүктесін табыңыз, айталық p, R-де сақталған нүктені p-ға ауыстырыңыз. Содан кейін р-ны рекурсивті түрде алып тастаңыз.

Ауыстыру нүктесін табу үшін, егер R x-ті (айталық) дискриминацияласа және R-дің дұрыс баласы болса, оң жақта орналасқан тамыр ағашынан минимум х мәні бар нүктені табыңыз. Әйтпесе, сол жақта орналасқан тамыр ағашынан максимум х мәні бар нүктені табыңыз.

Тепе-теңдік

Тепе-теңдік к-d ағашы күтімді қажет етеді, өйткені к-d ағаштары бірнеше өлшем бойынша сұрыпталады, сондықтан ағаштың айналуы оларды теңгеру үшін техниканы қолдану мүмкін емес, өйткені инвариантты бұзуы мүмкін.

Теңдестірілген бірнеше нұсқа кағаштар бар. Олар бөлінеді к-d ағаш, жалған к-d ағаш, K-D-B ағашы, hB-ағашы және Bkd-ағаш. Бұл нұсқалардың көпшілігі бейімделген к-д ағаштары.

Көршіні іздеу

Жақын көршіні 2 өлшемді ағаштан іздеу мысалы. Мұнда ағаш қазірдің өзінде тұрғызылған, әр түйін тіктөртбұрышқа сәйкес келеді, әр тіктөртбұрыш екі тең субтөртбұрышқа бөлінеді, ал жапырақтары бір нүктеден тұратын тіктөртбұрыштарға сәйкес келеді

The жақын көршіні іздеу (NN) алгоритмі ағаштағы берілген кіріс нүктесіне жақын нүктені табуға бағытталған. Бұл іздеуді іздеу кеңістігінің үлкен бөліктерін тез жою үшін ағаш қасиеттерін пайдалану арқылы тиімді жасауға болады.

А жақын көршісін іздеу к-d ағашы келесідей жалғасады:

  1. Түбір түйінінен бастап, алгоритм іздеу нүктесі енгізілген жағдайда (яғни нүкте ағымдық түйіннен кіші немесе үлкен екендігіне байланысты солға немесе оңға кетеді) рекурсивті түрде ағаштың бойымен жылжиды. бөлінген өлшем).
  2. Алгоритм парақ түйініне жеткеннен кейін, сол түйін нүктесін тексереді, ал егер арақашықтық жақсырақ болса, сол түйін нүктесі «ағымдағы ең жақсы» ретінде сақталады.
  3. Алгоритм әр түйінде келесі әрекеттерді орындай отырып, ағаштың рекурсиясын босатады:
    1. Егер ағымдағы түйін қазіргіден гөрі жақын болса, онда ол қазіргі ең жақсы болады.
    2. Алгоритм бөліну жазықтығының екінші жағында іздеу нүктесіне қазіргі ең жақсы нүктеге қарағанда жақын нүктелер болуы мүмкін екенін тексереді. Тұжырымдамада бұл бөлінудің қиылысуы арқылы жасалады гиперплан а гиперфера ағымдағы жақын қашықтыққа тең радиусы бар іздеу нүктесінің айналасында. Гиперпландардың барлығы осьтерге тураланғандықтан, бұл іздеу нүктесінің бөліну координатасы мен ағымдағы түйін арасындағы қашықтық іздеу нүктесінен қазіргі ең жақсыға дейінгі арақашықтықтан (жалпы координаталар) аз болуын білу үшін қарапайым салыстыру ретінде жүзеге асырылады.
      1. Егер гиперфера жазықтықты кесіп өтсе, жазықтықтың екінші жағында жақын нүктелер болуы мүмкін, сондықтан алгоритм бүкіл іздеу сияқты рекурсивті процестен кейін жақын орналасқан нүктелерді іздейтін ағаштың басқа тармағымен төмен қарай қозғалуы керек. .
      2. Егер гиперфера бөліну жазықтығымен қиылыспаса, онда алгоритм ағаш бойымен жүруді жалғастырады және сол түйіннің екінші жағындағы бүкіл тармақ жойылады.
  4. Алгоритм түбірлік түйін үшін осы процесті аяқтаған кезде іздеу аяқталады.

Жалпы алгоритм квадрат түбірлерді есептемеу үшін салыстыру үшін квадраттық қашықтықты қолданады. Сонымен қатар, ол салыстыру үшін айнымалыдағы квадрат токтың ең жақсы қашықтығын ұстап, есептеуді үнемдей алады.

Алгоритмді қарапайым модификация арқылы бірнеше тәсілмен кеңейтуге болады. Бұл қамтамасыз ете алады к сақтау арқылы жақын көршілер к біреуінің орнына қазіргі үздіктер. Филиал тек қашан жойылады к нүктелер табылды және тармақтың кез-келгеніне қарағанда жақын нүктелер болуы мүмкін емес к қазіргі үздіктер.

Сондай-ақ, оны тезірек іске қосу үшін оны жуықтау алгоритміне айналдыруға болады. Мысалы, жақын маңдағы көршіні іздеуге ағашта тексеруге арналған нүктелердің жоғарғы шекарасын орнату немесе нақты уақыт сағаты негізінде іздеу процесін тоқтату арқылы қол жеткізуге болады (бұл аппараттық құралдарда орынды болуы мүмкін). Ағашта орналасқан нүктелер үшін жақын көршіге нәтиже ретінде нөлдік қашықтықты беретін түйіндердің нақтылануын жаңартпау арқылы қол жеткізуге болады, бұл бірегей емес, бірақ бастапқы іздеу нүктесімен бірге орналасқан нүктелердің жойылатын минустары бар .

Шамамен жақын көрші нақты уақыт режимінде пайдалы, мысалы, робототехника, ең жақсы нүктені толық іздемегендіктен жылдамдықтың едәуір өсуіне байланысты. Оны жүзеге асырудың бірі болып табылады бірінші-іздеу.

Ауқымды іздеу

Ауқымды іздеу параметрлер ауқымын іздейді. Мысалы, егер ағаш табыс пен жасқа сәйкес мәндерді сақтап отырса, ауқымды іздеу ағаштың барлық мүшелерін іздеу сияқты болуы мүмкін, олардың жастары 20 мен 50 жас аралығында және кірістері 50,000 мен 80,000 аралығында болады. K-d ағаштары домен диапазонын ағаштың әр деңгейінде екіге бөлетіндіктен, олар диапазондық іздеу жүргізуге пайдалы.

Екілік іздеу ағаштарын талдау а-да ауқымды іздеудің ең нашар уақыты екенін анықтады к-өлшемді к-d ағашы бар n түйіндер келесі теңдеу арқылы берілген.[9]

Жоғары өлшемді деректермен өнімділіктің деградациясы

Жақын нүктені табу - бұл O (журнал n) кездейсоқ үлестірілген нүктелер жағдайында орташа есеппен жұмыс, дегенмен жалпы талдау қиын.[10]

Жоғары өлшемді кеңістіктерде өлшемділіктің қарғысы алгоритмді төменгі өлшемді кеңістіктерге қарағанда көптеген тармақтарға бару қажет етеді. Атап айтқанда, егер нүктелер саны өлшемдер санынан сәл ғана көп болса, алгоритм барлық нүктелерді сызықтық іздеуден гөрі сәл ғана жақсы болады. Жалпы ереже бойынша, егер өлшемділік болса , мәліметтердегі ұпай саны, , болу керек . Әйтпесе, қашан -d ағаштары жоғары өлшемді мәліметтермен пайдаланылады, ағаштағы нүктелердің көпшілігі бағаланады және тиімділігі толық іздеуден жақсы емес,[11] және егер жеткілікті жылдам жауап қажет болса, оның орнына жақын көршілес әдістерді қолдану керек.

Сұрау нүктесі k-d ағашының нүктелерінен алыс болған кезде өнімділіктің нашарлауы

Сонымен қатар, тіпті төмен өлшемді кеңістікте де, егер арасындағы орташа жұптық арақашықтық болса к сұрау нүктесінің жақын көршілері сұрау нүктесі мен әрқайсысы арасындағы орташа қашықтықтан едәуір аз к жақын көршілердің іздеу нәтижелері сызықтыққа қарай нашарлайды, өйткені сұрау нүктесінен әр жақын көршіге дейінгі арақашықтықтар шамасы үлкен. (Нашар жағдайда, басы центрленген сфераның бетінде таралған нүктелер бұлтын қарастырыңыз. Әр нүкте шығу тегінен бірдей қашықтықта орналасқан, сондықтан шығу тегі бойынша ең жақын көршіні іздеу барлық нүктелер арқылы қайталануы керек еді. жақын көршіні анықтау үшін сфераның беткі қабаты - бұл жағдайда тіпті ерекше емес.)

Ең нашар жағдайда kd ағашын іздеудің ықтимал маңызды деградациясын азайту үшін ағаш іздеу алгоритміне максималды қашықтық параметрін беруге болады және рекурсивті іздеуді ағаштың белгілі бір тармағындағы ең жақын нүкте мүмкін болмаған кезде кесуге болады. осы максималды арақашықтықтан жақын. Бұл жақын көршіні іздеуді жақын көршінің қайтара алмауына әкелуі мүмкін, демек сұраныс нүктесінен осы максималды қашықтықта нүктелер болмайды.

Күрделілік

  • Статикалық салу к-д ағашы n ұпайлар келесі нашар күрделілікке ие:
    • O (n журнал2 n) егер O (n журнал n) сияқты сұрыптау Heapsort немесе Mergesort өсіп келе жатқан ағаштың әр деңгейінде медиананы табу үшін қолданылады;
    • O (n журнал n) егер O (n) медианалардың медианасы алгоритм[3][4] өсіп келе жатқан ағаштың әр деңгейінде медиананы таңдау үшін қолданылады;
    • O (кн журнал n) егер n әрқайсысында нүктелер ескертіледі к өлшемдерін пайдалану O (n журнал n) сияқты сұрыптау Heapsort немесе Mergesort құрылысына дейін к-d ағаш.[7]
  • Теңдестірілген жағдайға жаңа нүкте енгізу к-d ағаш алады O (журнал n) уақыт.
  • Теңестірілген нүктені алып тастау к-d ағаш алады O (журнал n) уақыт.
  • Параллельді оське параллель диапазонға сұрау салу к-d ағаш алады O (n1−1 / к +м) уақыт, қайда м - берілген нүктелердің саны және к өлшемі к-d ағаш.
  • Тепе-теңдікте 1 жақын көршіні табу ккездейсоқ бөлінген нүктелермен -d ағаш алады O (журнал n) орташа уақыт.

Вариациялар

Көлемдік нысандар

Ұпайлардың орнына а к-d ағашы да болуы мүмкін тіктөртбұрыштар немесе гипер тікбұрыштар.[12][13] Осылайша, ауқымды іздеу іздеу тіктөртбұрышымен қиылысатын барлық төртбұрыштарды қайтару проблемасына айналады. Ағаш барлық тіктөртбұрыштармен әдеттегідей салынған. Жылы ортогональды ауқымды іздеу, қарама-қарсы координат медианамен салыстыру кезінде қолданылады. Мысалы, егер ағымдағы деңгей х бойымен бөлінген болсажоғары, біз x-ті тексеремізтөмен іздеу тіктөртбұрышының координаты. Егер медиана х-тен кіші болсатөмен іздеу тіктөртбұрышының координаты, сол жақтағы тармақтың бірде-бір тіктөртбұрышы іздеу тіктөртбұрышымен қиылыса алмайды және оны кесуге болмайды. Әйтпесе екі тармақты да өту керек. Сондай-ақ қараңыз аралық ағаш, бұл 1 өлшемді ерекше жағдай.

Тек жапырақтарда

А-ны анықтауға болады к- жапырақта ғана сақталған нүктелері бар ағаш.[2] Бұл формасы к-d ағашы стандартты орта сплиттен басқа әртүрлі сплит механикасына мүмкіндік береді. Ортаңғы нүктені бөлу ережесі[14] нүктелердің таралуына қарамастан ізделетін кеңістіктің ең ұзын осінің ортасында таңдайды. Бұл кадрлардың арақатынасы ең көбі 2: 1 болатындығына кепілдік береді, бірақ тереңдігі нүктелердің таралуына байланысты. Жылжу-орта нүкте деп аталатын вариация, егер бөлудің екі жағында да нүктелер болса, ортаға бөлінеді. Әйтпесе, ол ортасына жақын жерде бөлінеді. Maneewongvatana және Mount бұл жалпы деректер жиынтығында «жеткілікті жақсы» өнімділікті ұсынады.

Сырғымалы-ортаңғы нүктені қолдану арқылы жуық көрші сұрауға жауап беруге болады .Аралықты шамамен санауға жауап беруге болады осы әдіспен.

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

Жақын вариациялар:

  • жасырын к-d ағаш, а к-d ағашы анық сақталған бөліністер жиынтығынан гөрі айқын емес бөлу функциясымен анықталады
  • мин / макс к-d ағаш, а кминималды және максималды мәнді әр түйінмен байланыстыратын -д ағаш
  • Босаңсыды к-d ағаш, а к- әр түйіндегі дискриминанттар ерікті болатын ағаш

Ұқсас вариациялар:

  • Төрт ағаш, бір уақытта екі өлшемге бөлінетін кеңістікті бөлетін құрылым, осылайша әр түйінде 4 баладан болады
  • Октри, үш өлшемге бір уақытта бөлінетін кеңістікті бөлетін құрылым, осылайша әр түйінде 8 бала болады
  • Шар ағаш, жақын аралықты іздеуге пайдалы кеңістікті бөлу
  • R-ағаш және шекаралық интервал иерархиясы, аймақтарды қабаттастыратын нүктелерден гөрі объектілерді бөлуге арналған құрылым
  • Vantage-point ағаш, а нұсқасы к- деректерді бөлу үшін гиперпландардың орнына гиперсфераларды қолданатын ағаш

Шешуге болатын мәселелер к-d ағаштар:

  • Рекурсивті бөлу, ұқсас статистикалық шешімдер ағаштарын салу әдістемесі к-d ағаштар
  • Клидің өлшемі проблемасы, қолдану арқылы шешілетін тіктөртбұрыштар одағының ауданын есептеу проблемасы к-d ағаштар
  • Гильотина мәселесі, а табу проблемасы к- ұяшықтары берілген тік төртбұрыштар жиынтығын құрайтындай үлкен ағаш

Ашық көзді енгізу

  • АЛГЛИБ жақын көршісіне негізделген және жақын көршінің алгоритмдеріне негізделген k-d ағашының C # және C ++ қосымшалары бар
  • SciPy, ғылыми есептеулерге арналған Python кітапханасында k-d ағашының жақын көршіні іздеу алгоритмдері негізінде жүзеге асырылуы бар.
  • scikit-үйрену, машиналық оқытуға арналған Python кітапханасында k-d ағаштарының ең жақын көршісіне және радиустағы көршілеріне іздеуді жүзеге асыруы бар.

Әдебиеттер тізімі

  1. ^ Бентли, Дж. Л. (1975). «Ассоциативті іздеу үшін қолданылатын көп өлшемді екілік іздеу ағаштары». ACM байланысы. 18 (9): 509–517. дои:10.1145/361002.361007. S2CID  13091446.
  2. ^ а б Берг, Марк де; Чеонг, Отфрид; Кревельд, Марк ван; Overmars, Mark (2008). «Ортогональды аралықты іздеу». Есептеу геометриясы. 95-120 бет. дои:10.1007/978-3-540-77974-2_5. ISBN  978-3-540-77973-5.
  3. ^ а б Блум, М.; Флойд, Р.; Пратт, В.Р.; Ривист, Р.Л.; Таржан, Р.Э. (Тамыз 1973). «Таңдау үшін уақыт шектеулері» (PDF). Компьютерлік және жүйелік ғылымдар журналы. 7 (4): 448–461. дои:10.1016 / S0022-0000 (73) 80033-9.
  4. ^ а б Кормен, Томас Х.; Лейзерсон, Чарльз Э.; Ривест, Рональд Л. Алгоритмдерге кіріспе. MIT Press және McGraw-Hill. 10 тарау.
  5. ^ Вальд I, Гавран V (қыркүйек 2006). «Сәуле іздеуге арналған жылдам кд-ағаштарын салу және О (N log N)» (PDF). In: Интерактивті сәулелерді іздеу бойынша 2006 IEEE симпозиумының материалдары: 61–69. дои:10.1109 / RT.2006.280216. ISBN  1-4244-0693-5. S2CID  1603250.
  6. ^ Havran V, Bittner J (2002). «Сәулелік түсірілім үшін к-д ағаштарын жақсарту туралы» (PDF). In: WSCG материалдары: 209–216.
  7. ^ а б Қоңыр RA (2015). «Теңгерімді құру к-д ағаш O (кн журнал n) уақыт «. Компьютерлік графика техникасы журналы. 4 (1): 50–68.
  8. ^ Чандран, Шарат. Кд-ағаштарымен таныстыру. Мэриленд университетінің компьютерлік ғылымдар бөлімі.
  9. ^ Ли, Д. Т .; Wong, C. K. (1977). «Көп өлшемді екілік іздеу ағаштары мен теңдестірілген төртбұрышты ағаштарды аймақтық және ішінара іздеу бойынша ең нашар жағдайды талдау». Acta Informatica. 9. дои:10.1007 / BF00263763. S2CID  36580055.
  10. ^ Фрейдман, Дж. Х.; Бентли, Дж. Л.; Финкель, Р.А. (1977). «Логарифмалық күтілетін уақытта ең жақсы матчтарды табу алгоритмі». Математикалық бағдарламалық жасақтамадағы ACM транзакциялары. 3 (3): 209. дои:10.1145/355744.355745. OSTI  1443274. S2CID  10811510.
  11. ^ Джейкоб Э. Гудман, Джозеф О'Рурк және Пиотр Индик (Ред.) (2004). «39 тарау: Үлкен кеңістіктегі жақын көршілер». Дискретті және есептеу геометриясының анықтамалығы (2-ші басылым). CRC Press.CS1 maint: қосымша мәтін: авторлар тізімі (сілтеме)
  12. ^ Розенберг, Дж.Б. (1985). «Салыстырылған географиялық деректер құрылымы: аймақтық сұраныстарды қолдайтын мәліметтер құрылымын зерттеу». Интегралды микросхемалар мен жүйелерді компьютерлік жобалау бойынша IEEE транзакциялары. 4: 53–67. дои:10.1109 / TCAD.1985.1270098. S2CID  31223074.
  13. ^ Houthuys, P. (1987). «Box Sort, төртбұрышты қораптарға арналған көп өлшемді екілік сұрыптау әдісі, жылдам диапазонда іздеу үшін қолданылады». Көрнекі компьютер. 3 (4): 236–249. дои:10.1007 / BF01952830. S2CID  3197488.
  14. ^ S. Maneewongvatana және D. M. тауы. Егер сіздің достарыңыз семіз болса, арық болған дұрыс. Есептеу геометриясы бойынша 4-жылдық CGC семинары, 1999 ж.