Шар ағаш - Ball tree - Wikipedia

Жылы есептеу техникасы, а шар ағаш, бал ағашы[1] немесе метрикалық ағаш, Бұл кеңістікті бөлу мәліметтер құрылымы көп өлшемді кеңістіктегі нүктелерді ұйымдастыру үшін. Доп ағашы өз атын «шарлар» деп аталатын гиперфералардың кірістірілген жиынтығына бөлуінен алады. Алынған деректер құрылымы бірқатар қосымшалар үшін пайдалы болатын сипаттамаларға ие, ең бастысы жақын көршіні іздеу.

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

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

Ағаштағы әрбір түйін өзінің ішкі тармағында барлық мәліметтер нүктелерін қамтитын ең кішкентай шарды анықтайды. Бұл берілген тест нүктесі үшін пайдалы қасиетті тудырады т, доптың кез-келген нүктесіне дейінгі арақашықтық B ағашта қашықтықтан үлкен немесе тең т допқа. Ресми түрде:[2]

Қайда - доптың кез-келген нүктесінен мүмкін болатын минималды арақашықтық B бір сәтке дейін т.

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

Қарапайым ағаштар ұқсас, бірақ екіліктер екі шарды пайдаланудың орнына бір шарға, ал қалған мәліметтерге бөлінеді.

Құрылыс

Бірқатар шар ағаштарын салу алгоритмдері бар.[1] Мұндай алгоритмнің мақсаты - қажетті жағдайда (мысалы, жақын көрші) сұраныстарды орташа жағдайда тиімді қолдайтын ағаш жасау. Идеал ағаштың нақты критерийлері жауап берілетін сұрақтың түріне және негізгі деректердің таралуына байланысты болады. Алайда, тиімді ағаштың жалпы қолданылатын өлшемі оның ішкі түйіндерінің жалпы көлемін азайтуға мүмкіндік береді. Шынайы мәліметтер жиынтығының әр түрлі таралуын ескере отырып, бұл қиын мәселе, бірақ деректерді іс жүзінде жақсы бөлетін бірнеше эвристика бар. Жалпы алғанда, ағаш салу құны мен осы көрсеткіштің тиімділігі арасында өзара айырмашылық бар. [2]

Бұл бөлімде осы алгоритмдердің ең қарапайымдары қысқаша сипатталған. Бес алгоритмді тереңірек талқылауды Стивен Омохундро ұсынды.[1]

k-d Құрылыс алгоритмі

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

Псевдокод

функциясы ағаш_қызы болып табылады    енгізу: Д., мәліметтер нүктесінің жиымы. шығу: B, салынған шар ағашының тамыры. егер бір нүкте қалады содан кейін        жапырақ жасау B құрамында бір нүкте бар Д.        қайту B    басқа        рұқсат етіңіз c ең үлкен спрэдтің өлшемі болсын б ескере отырып, таңдалған орталық нүкте болыңыз L, R өлшем бойынша медиананың сол және оң жағында жатқан нүктелер жиынтығы c        жасау B екі баламен: B.pivot: = б            B.child1: = construct_balltree (L), B.child2: = construct_balltree (R), рұқсат етіңіз B.радиус - максималды арақашықтық б балалар арасында қайту B    егер аяқталсасоңғы функция

Жақын жерде іздеу

Шарлы ағаштардың маңызды қолданылуы тездетілуде жақын көршіні іздеу сұраулар, олардың мақсаты ағаштағы k нүктелерін белгілі бір қашықтық метрикасы бойынша берілген сынақ нүктесіне жақын болатын нүктелерді табу болып табылады (мысалы. Евклидтік қашықтық ). Қарапайым іздеу алгоритмі, кейде оны KNS1 деп атайды, шар ағашының арақашықтық қасиетін пайдаланады. Атап айтқанда, егер алгоритм деректер құрылымын тест нүктесімен іздейтін болса т, және қазірдің өзінде біраз нәрсені көрді б бұл ең жақын т осы уақытқа дейін кездескен ұпайлардың арасында, содан кейін доп алыс тұрған кез-келген ағаш т қарағанда б іздеудің қалған бөлігі үшін елемеуге болады.

Сипаттама

Жақын көрші алгоритм шар ағашы түйіндерді тамырдан бастап тереңдікте бірінші ретпен зерттейді. Іздеу кезінде алгоритм max-first-ге ие болады кезек кезегі (көбінесе үйінді ) деп белгіленеді Q мұнда, осы уақытқа дейін кездескен ең жақын нүктелердің. Әр түйінде B, ол кезектегі кезектің жаңартылған нұсқасын қайтармас бұрын үш операцияның бірін орындай алады:

  1. Егер сынақ нүктесінен қашықтық болса т ағымдағы түйінге B ең алыс нүктеден үлкен Q, елемеу B және оралу Q.
  2. Егер B - бұл парақтың түйіні, көрсетілген барлық нүктелерді қарап шығыңыз B және жақын маңдағы кезекті тиісті түрде жаңартыңыз. Жаңартылған кезекті қайтарыңыз.
  3. Егер B ішкі түйін болып табылады, алгоритмді рекурсивті түрде шақырыңыз B 'екі бала, орталығы жақын орналасқан баланы іздеуде т бірінші. Кезекті осы қоңыраулардың әрқайсысы кезекпен жаңартқаннан кейін қайтарыңыз.

Рекурсивті іздеуді жоғарыдағы 3-тармақта сипатталған тәртіпте орындау, іздеу кезінде одан әрі баланың толықтай кесіліп кету ықтималдығын арттырады.

Псевдокод

функциясы knn_search болып табылады    енгізу:         t, k сұранысының мақсатты нүктесі, Q-ны іздеу үшін t-нің ең жақын көршілерінің саны, ағашта ең көп k нүктесі B, түйін немесе шар болатын максималды бірінші кезек шығу:         B ішіндегі k жақын көршілері бар Q егер арақашықтық (t, B.pivot) - B.radius ≥ қашықтық (t, Q. бірінші) содан кейін        қайту Q өзгеріссіз басқаша болса B - жапырақ түйіні содан кейін        әрқайсысы үшін р нүктесі B істеу            егер қашықтық (t, p) <қашықтық (t, Q. бірінші) содан кейін                Q-ға p қосыңыз егер өлшемі (Q)> k содан кейін                    ең алыс көршіңізді Q-дан алып тастаңыз егер аяқталса            егер аяқталса        қайталау    басқа        child1 t-ге жақын түйін болсын, child2 t knn_search (t, k, Q, child1) knn_search (t, k, Q, child2) егер аяқталсасоңғы функция[2]

Өнімділік

Бірнеше басқа деректер құрылымдарымен салыстырғанда, шар ағаштар жақын көршілерді іздеу мәселесінде өте жақсы жұмыс істейтіндігі, әсіресе олардың өлшемдері көбейген кезде көрсетілген.[3][4]Алайда, берілген қосымшаның ең жақын көрші деректер құрылымы өлшемділікке, деректер нүктелерінің санына және деректердің құрылымына байланысты болады.

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

  1. ^ а б c Омохундро, Стивен М. (1989) «Баллетрийдің бес алгоритмі»
  2. ^ а б c Лю Т .; Мур, А. және Грей, А. (2006). «Тиімді жоғары өлшемді параметрлік емес жіктеудің жаңа алгоритмдері» (PDF). Машиналық оқытуды зерттеу журналы. 7: 1135–1158.
  3. ^ Кумар, Н .; Чжан, Л .; Nayar, S. (2008). «Жақын көршілердің суреттерін ұқсас патчтарды табудың алгоритмі дегеніміз не?». Computer Vision - ECCV 2008 ж (PDF). Информатика пәнінен дәрістер. 5303. б. 364. CiteSeerX  10.1.1.360.7582. дои:10.1007/978-3-540-88688-4_27. ISBN  978-3-540-88685-3.
  4. ^ Кибрия, А.М .; Фрэнк, Е. (2007). «Көршінің дәл жақын алгоритмдерін эмпирикалық салыстыру». Деректер базасындағы білімді ашу: PKDD 2007 ж (PDF). Информатика пәнінен дәрістер. 4702. б. 140. дои:10.1007/978-3-540-74976-9_16. ISBN  978-3-540-74975-2.