आर-ट्री

आर-ट्री ट्री डेटा संरचनाएं हैं जिनका उपयोग स्थानिक सूचकांक के लिए किया जाता है, अर्थात, भौगोलिक समन्वय प्रणाली, आयत या बहुभुज जैसी बहु-आयामी जानकारी को अनुक्रमित करने के लिए आर-ट्री का प्रस्ताव 1984 में एंटोनिन गुटमैन द्वारा किया गया था और इसे सैद्धांतिक और व्यावहारिक दोनों संदर्भों में महत्वपूर्ण उपयोग मिला है। आर-ट्री के लिए एक सामान्य वास्तविक दुनिया का उपयोग स्थानिक वस्तुओं जैसे कि रेस्तरां स्थानों या बहुभुजों को संग्रहीत करना हो सकता है, जिनसे विशिष्ट मानचित्र बने होते हैं: सड़कें, इमारतें, झीलों की रूपरेखा, समुद्र तट, आदि और फिर प्रश्नों के तुरंत उत्तर खोजे जाते है जैसे कि मेरे वर्तमान स्थान के 2 किमी के अंदर सभी संग्रहालय खोजे, मेरे स्थान के 2 किमी के अंदर सभी सड़क खंडों को पुनः प्राप्त करें (उन्हें नेविगेशन प्रणाली में प्रदर्शित करने के लिए) या निकटतम गैस स्टेशन खोजे जाते है (चूँकि सड़कों को ध्यान में नहीं रखते हुए) आर-ट्री ग्रेट-सर्कल दूरी सहित विभिन्न दूरी आव्यूह के लिए निकटतम समीप खोज को भी तेज कर सकता है।

आर-ट्री विचार
डेटा संरचना का मुख्य विचार आस-पास की वस्तुओं को समूहित करना और उन्हें ट्री के अगले उच्च स्तर में उनकी न्यूनतम सीमा वाली आयत के साथ प्रस्तुत करना है; आर-ट्री में आर आयत के लिए है। चूँकि सभी वस्तुएँ इस बाउंडिंग आयत के अंदर स्थित हैं, एक क्वेरी जो बाउंडिंग आयत को प्रतिच्छेद नहीं करती है, वह किसी भी निहित वस्तु को प्रतिच्छेद नहीं कर सकती है। पत्ती स्तर पर, प्रत्येक आयत एक एकल वस्तु का वर्णन करता है; उच्च स्तर पर एकत्रीकरण में वस्तुओं की बढ़ती संख्या सम्मिलित होती है। इसे डेटा समूह के तेजी से सामान्य अनुमान के रूप में भी देखा जा सकता है।

बी-ट्री के समान, आर-ट्री भी एक संतुलित खोज ट्री है (इसलिए सभी लीफ नोड्स समान गहराई पर हैं), डेटा को पृष्ठों में व्यवस्थित करता है, और डिस्क पर संचयन के लिए डिज़ाइन किया गया है (जैसा कि डेटाबेस में उपयोग किया जाता है)। प्रत्येक पृष्ठ में अधिकतम संख्या में प्रविष्टियाँ हो सकती हैं, जिन्हें अधिकांशतः $$M$$ इस रूप में दर्शाया जाता है यह न्यूनतम भरण की भी आश्वासन देता है (रूट नोड को छोड़कर), चूँकि प्रविष्टियों की अधिकतम संख्या के 30%-40% के न्यूनतम भरण के साथ सर्वश्रेष्ठ प्रदर्शन का अनुभव किया गया है (बी*-ट्री 50% पृष्ठ भरने की आश्वासन देते हैं, और बी*- ट्री भी 66%)। इसका कारण बी-ट्रीों में संग्रहीत रैखिक डेटा के विपरीत स्थानिक डेटा के लिए आवश्यक अधिक जटिल संतुलन है।

अधिकांश ट्रीों की तरह, खोज एल्गोरिदम (उदाहरण के लिए, प्रतिच्छेदन (समूह सिद्धांत), रोकथाम, निकटतम समीप खोज) अपेक्षाकृत सरल हैं। मुख्य विचार यह तय करने के लिए बाउंडिंग बॉक्स का उपयोग करना है कि उपट्री के अंदर खोजना है या नहीं है इस प्रकार, खोज के समय ट्री के अधिकांश नोड्स कभी नहीं पढ़े जाते हैं। बी-ट्री की तरह, आर-ट्री बड़े डेटा समूह और डेटाबेस के लिए उपयुक्त हैं, जहां जरूरत पड़ने पर नोड्स को मेमोरी में पेज किया जा सकता है, और पूरे ट्री को मुख्य मेमोरी में नहीं रखा जा सकता है। तथापि डेटा को मेमोरी (या कैश्ड) में फिट किया जा सकता है, अधिकांश वास्तविक अनुप्रयोगों में आर-ट्री समान्यत: सभी ऑब्जेक्ट्स की अनुभवहीन जांच पर प्रदर्शन लाभ प्रदान करेंगे जब ऑब्जेक्ट्स की संख्या कुछ सौ या उससे अधिक हो। चूँकि इन-मेमोरी अनुप्रयोगों के लिए, समान विकल्प हैं जो थोड़ा उत्तम प्रदर्शन प्रदान कर सकते हैं या वास्तव में प्रयुक्त करने में आसान हो सकते हैं। कंप्यूटर क्लस्टर में आर-ट्री के लिए इन-मेमोरी कंप्यूटिंग को बनाए रखने के लिए जहां कंप्यूटिंग नोड्स एक नेटवर्क द्वारा जुड़े हुए हैं, शोधकर्ताओं ने वितरित वातावरण में आर-ट्री के तहत डेटा-गहन अनुप्रयोगों को प्रयुक्त करने के लिए आरडीएमए (रिमोट डायरेक्ट मेमोरी एक्सेस) का उपयोग किया है। यह दृष्टिकोण तेजी से बड़े अनुप्रयोगों के लिए स्केलेबल है और आर-ट्री के लिए उच्च थ्रूपुट और कम विलंबता प्रदर्शन प्राप्त करता है।

आर-ट्री की मुख्य कठिनाई एक कुशल ट्री का निर्माण करना है जो एक ओर संतुलित हो (जिससे पत्ती के नोड समान ऊंचाई पर हों) दूसरी ओर आयतें बहुत अधिक खाली जगह को कवर न करें और बहुत अधिक ओवरलैप न करें ( जिससे खोज के समय, कम उपवृक्षों को संसाधित करने की आवश्यकता हो)। उदाहरण के लिए, एक कुशल ट्री प्राप्त करने के लिए अवयव ों को सम्मिलित करने का मूल विचार सदैव उस उपट्री में सम्मिलित करना है जिसके बाउंडिंग बॉक्स के कम से कम विस्तार की आवश्यकता होती है। एक बार जब वह पृष्ठ भर जाता है, तो डेटा को दो सेटों में विभाजित किया जाता है, जिनमें से प्रत्येक को न्यूनतम क्षेत्र को कवर करना चाहिए। आर-ट्री के लिए अधिकांश शोध और सुधारों का उद्देश्य ट्री के निर्माण के विधि में सुधार करना है और इसे दो उद्देश्यों में समूहीकृत किया जा सकता है: स्क्रैच से एक कुशल ट्री का निर्माण (जिसे बल्क-लोडिंग के रूप में जाना जाता है) और उपस्थित ट्री पर परिवर्तन करना (सम्मिलन और विलोपन) है।

आर-ट्रीज़ सबसे व्यर्थ स्थिति में अच्छे प्रदर्शन की आश्वासन नहीं देते हैं, किंतु समान्यता: वास्तविक दुनिया के डेटा के साथ अच्छा प्रदर्शन करते हैं। जबकि सैद्धांतिक रुचि अधिक है, आर-ट्री का (थोक-भरा हुआ) प्राथमिकता आर-ट्री संस्करण सबसे व्यर्थ स्थिति में अधिकतम है, किंतु बढ़ती सम्मिश्र्ता के कारण अब तक व्यावहारिक अनुप्रयोगों में इस पर अधिक ध्यान नहीं दिया गया है।

जब डेटा को आर-ट्री में व्यवस्थित किया जाता है, तो एक निश्चित दूरी के आर के निकटतम और के के निकटतम समीप ((किसी भी Lp-नॉर्म के लिए)) सभी बिंदुओं की कुशलता से एक स्थानिक जुड़ाव का उपयोग करके गणना की जा सकती है। यह ऐसे प्रश्नों पर आधारित अनेक  एल्गोरिदम के लिए लाभदायक है, उदाहरण के लिए स्थानीय आउटलायर फैक्टर डेली-क्लू, डेंसिटी-लिंक-क्लस्टरिंग एक क्लस्टर विश्लेषण एल्गोरिदम है जो प्रकाशिकी एल्गोरिथ्म क्लस्टरिंग की कुशलतापूर्वक गणना करने के लिए समान प्रकार के स्थानिक जुड़ाव के लिए आर-ट्री संरचना का उपयोग करता है।

वेरिएंट

 * प्राथमिकता आर-वृक्ष
 * आर*-वृक्ष
 * आर+ ट्री
 * हिल्बर्ट आर-ट्री
 * एक्स-ट्री

डेटा लेआउट
आर-ट्री में डेटा को उन पृष्ठों में व्यवस्थित किया जाता है जिनमें प्रविष्टियों की एक परिवर्तनीय संख्या हो सकती है (कुछ पूर्व-निर्धारित अधिकतम तक, और समान्यत: न्यूनतम भरण से ऊपर) नॉन- लसीका नोड के अंदर प्रत्येक प्रविष्टि डेटा के दो टुकड़े संग्रहीत करती है: चाइल्ड नोड की पहचान करने का एक विधि है, और इस चाइल्ड नोड के अंदर सभी प्रविष्टियों का आकार निर्धारक बॉक्स लीफ नोड्स प्रत्येक बच्चे के लिए आवश्यक डेटा संग्रहीत करते हैं अधिकांशतः एक बिंदु या बाउंडिंग बॉक्स बच्चे का प्रतिनिधित्व करता है और बच्चे के लिए एक बाहरी पहचानकर्ता होता है। बिंदु डेटा के लिए, पत्ती प्रविष्टियाँ केवल बिंदु ही हो सकती हैं। बहुभुज डेटा के लिए (जिसमें अधिकांशतः बड़े बहुभुजों के संचयन की आवश्यकता होती है) सामान्य सेटअप ट्री में एक अद्वितीय पहचानकर्ता के साथ बहुभुज के केवल एमबीआर (न्यूनतम बाउंडिंग आयत) को संग्रहीत करना है।

खोजें
श्रेणी खोज में, इनपुट एक खोज आयत (क्वेरी बॉक्स) है। खोजना अधिक सीमा तक बी+ ट्री में खोजने के समान है। खोज ट्री के मूल नोड से प्रारंभ होती है। प्रत्येक आंतरिक नोड में संबंधित चाइल्ड नोड के लिए आयतों और संकेतकों का एक समूह होता है और प्रत्येक लीफ नोड में स्थानिक वस्तुओं के आयत होते हैं (कुछ स्थानिक वस्तु के लिए संकेतक वहां हो सकते हैं)। नोड में प्रत्येक आयत के लिए, यह तय करना होगा कि यह खोज आयत को ओवरलैप करता है या नहीं। यदि हां, तो संबंधित चाइल्ड नोड को भी खोजना होगा। खोज इस प्रकार पुनरावर्ती विधि से की जाती है जब तक कि सभी ओवरलैपिंग नोड्स का पता नहीं लगा लिया जाता। जब एक लीफ नोड तक पहुंच जाता है, तो निहित बाउंडिंग बॉक्स (आयत) का परीक्षण खोज आयत के विरुद्ध किया जाता है और उनके ऑब्जेक्ट (यदि कोई हों) को परिणाम समूह में डाल दिया जाता है यदि वे खोज आयत के अंदर होते हैं।

निकटतम समीप खोज जैसी प्राथमिकता वाली खोज के लिए, क्वेरी में एक बिंदु या आयत होता है। रूट नोड को प्राथमिकता श्रंखला में डाला गया है। जब तक श्रंखला  खाली नहीं हो जाती या वांछित संख्या में परिणाम नहीं आ जाते, श्रंखला  में निकटतम प्रविष्टि को संसाधित करके खोज जारी रहती है। ट्री नोड्स का विस्तार किया जाता है और उनके बच्चों को पुनः सम्मिलित किया जाता है। श्रंखला  में सामने आने पर लीफ प्रविष्टियाँ लौटा दी जाती हैं। इस दृष्टिकोण का उपयोग विभिन्न दूरी आव्यूह `के साथ किया जा सकता है, जिसमें भौगोलिक डेटा के लिए ग्रेट-सर्कल दूरी भी सम्मिलित है।

निवेशन
किसी ऑब्जेक्ट को सम्मिलित करने के लिए, ट्री को रूट नोड से पुनरावर्ती रूप से ट्रैवर्स किया जाता है। प्रत्येक चरण में, वर्तमान निर्देशिका नोड में सभी आयतों की जांच की जाती है, और एक उम्मीदवार को एक अनुमान का उपयोग करके चुना जाता है जैसे कि उस आयत को चुनना जिसमें कम से कम विस्तार की आवश्यकता होती है। खोज तब इस पृष्ठ पर उतरती है, जब तक कि एक लीफ नोड तक नहीं पहुंच जाती। यदि पत्ती नोड भरा हुआ है, तो सम्मिलन करने से पहले इसे विभाजित किया जाना चाहिए। फिर, चूंकि एक विस्तृत खोज बहुत महंगी है, इसलिए नोड को दो भागों में विभाजित करने के लिए एक अनुमान का उपयोग किया जाता है। नए बनाए गए नोड को पिछले स्तर पर जोड़ने से, यह स्तर फिर से ओवरफ्लो हो सकता है, और ये ओवरफ्लो रूट नोड तक फैल सकते हैं; जब यह नोड भी ओवरफ्लो हो जाता है, तो एक नया रूट नोड बन जाता है और ट्री की ऊंचाई बढ़ जाती है।

सम्मिलन उपट्री चुनना
एल्गोरिदम को यह तय करने की आवश्यकता है कि किस उपट्री को सम्मिलित करना है। जब कोई डेटा ऑब्जेक्ट पूरी तरह से एक ही आयत में समाहित होता है, तो विकल्प स्पष्ट होता है। जब अनेक विकल्प या आयतों को बढ़ाने की आवश्यकता होती है, तो विकल्प ट्री के प्रदर्शन पर महत्वपूर्ण प्रभाव डाल सकता है।

ऑब्जेक्ट को उस उपट्री में डाला जाता है जिसे सबसे कम विस्तार की आवश्यकता होती है। एक मिश्रण अनुमानी का प्रयोग सर्वत्र किया जाता है। आगे क्या होता है यह ओवरलैप को कम करने की प्रयाश करता है (संबंधों के स्थिति में, कम से कम विस्तार और फिर सबसे कम क्षेत्र को प्राथमिकता दें); उच्च स्तर पर, यह आर-ट्री के समान व्यवहार करता है, किंतु संबंधों पर फिर से छोटे क्षेत्र वाले उपट्री को प्राथमिकता देता है। आर*-ट्री में आयतों का घटा हुआ ओवरलैप पारंपरिक आर-ट्री की तुलना में प्रमुख लाभों में से एक है।

एक अतिप्रवाहित नोड को विभाजित करना
चूँकि एक नोड की सभी वस्तुओं को दो नोड्स में पुनर्वितरित करने के लिए विकल्पों की एक घातीय संख्या होती है, सर्वोत्तम विभाजन खोजने के लिए एक अनुमान को नियोजित करने की आवश्यकता होती है। उत्कृष्ट आर-ट्री में, गुटमैन ने दो ऐसे अनुमान प्रस्तावित किए, जिन्हें क्वाड्रैटिकस्प्लिट और लीनियरस्प्लिट कहा जाता है। द्विघात विभाजन में, एल्गोरिदम आयतों की जोड़ी की खोज करता है जो एक ही नोड में सबसे व्यर्थ संयोजन है, और उन्हें दो नए समूहों में प्रारंभिक वस्तुओं के रूप में रखता है। इसके बाद यह उस प्रविष्टि की खोज करता है जिसमें किसी एक समूह (क्षेत्र वृद्धि के संदर्भ में) के लिए सबसे शसक्त प्राथमिकता है और इस समूह को तब तक ऑब्जेक्ट आवंटित करता है जब तक कि सभी ऑब्जेक्ट असाइन नहीं किए जाते (न्यूनतम भरण को संतुष्ट करते हुए)।

अन्य विभाजन रणनीतियाँ भी हैं जैसे ग्रीन्स स्प्लिट, आर*-ट्री विभाजन अनुमानी (जो फिर से ओवरलैप को कम करने की प्रयाश करता है, किंतु द्विघात पृष्ठों को भी प्राथमिकता देता है) या एंग और टैन द्वारा प्रस्तावित रैखिक विभाजन एल्गोरिथ्म (जो चूँकि बहुत अनियमित आयत उत्पन्न कर सकता है, जो अनेक वास्तविक विश्व रेंज और विंडो प्रश्नों के लिए कम प्रदर्शन करने वाला है)। अधिक उन्नत विभाजन अनुमानी होने के अतिरिक्त, आर *-ट्री कुछ नोड सदस्यों को फिर से सम्मिलित करके एक नोड को विभाजित करने से बचने की भी प्रयाश करता है, जो कि बी-ट्री ओवरफ्लोिंग नोड्स को संतुलित करने के विधि के समान है। यह ओवरलैप को कम करने और इस प्रकार ट्री के प्रदर्शन को बढ़ाने के लिए भी दिखाया गया था।

अंत में, एक्स-ट्री इसे एक आर*-ट्री वेरिएंट के रूप में देखा जा सकता है जो एक नोड को विभाजित नहीं करने का निर्णय ले सकता है, किंतु सभी अतिरिक्त प्रविष्टियों वाले एक तथाकथित सुपर-नोड का निर्माण कर सकता है, जब इसे एक अच्छा विभाजन नहीं मिलता है (विशेष रूप से उच्च के लिए) आयामी डेटा)।

विलोपन
किसी पृष्ठ से किसी प्रविष्टि को हटाने के लिए मूल पृष्ठों के बाउंडिंग आयतों को अद्यतन करने की आवश्यकता हो सकती है। चूँकि जब कोई पृष्ठ कम भरा होता है, तो वह अपने समिपों के साथ संतुलित नहीं होगा। इसके अतिरिक्त, पेज को विघटित कर दिया जाएगा और उसके सभी बच्चों (जो कि केवल लीफ ऑब्जेक्ट ही नहीं, किंतु सबट्री भी हो सकते हैं) को फिर से सम्मिलित कर दिया जाएगा। यदि इस प्रक्रिया के समय रूट नोड में एक भी अवय है, तो ट्री की ऊंचाई कम हो सकती है।

थोक-लोडिंग
$$, इसे $$s=\lceil l^{1/d}\rceil $$ के रूप में प्राप्त करने के लिए प्रत्येक आयाम में आवश्यक विभाजन कारक, फिर 1-आयामी सॉर्टिंग का उपयोग करके प्रत्येक आयाम को क्रमिक रूप से $$s$$ समान आकार के विभाजन में विभाजित करता है। परिणामी पृष्ठ, यदि वे एक से अधिक पृष्ठों पर अधिकृत करते हैं, तो उसी एल्गोरिथ्म का उपयोग करके फिर से थोक में लोड किए जाते हैं। बिंदु डेटा के लिए, लीफ़ नोड्स ओवरलैप नहीं होंगे, और डेटा स्थान को लगभग समान आकार के पृष्ठों में "टाइल" करेंगे।
 * निकटतम-एक्स: वस्तुओं को उनके पहले निर्देशांक (एक्स) के अनुसार क्रमबद्ध किया जाता है और फिर वांछित आकार के पृष्ठों में विभाजित किया जाता है।
 * पैक्ड हिल्बर्ट आर-ट्री: निकटतम-एक्स की भिन्नता, किंतु एक्स समन्वय का उपयोग करने के अतिरिक्त आयत के केंद्र के हिल्बर्ट मान का उपयोग करके सॉर्ट करना है। इसकी कोई आश्वासन नहीं है कि पेज ओवरलैप नहीं होंगे।
 * सॉर्ट-टाइल-रिकर्सिव (एसटीआर): निकटतम-एक्स का एक और रूपांतर, जो आवश्यक पत्तियों की कुल संख्या का अनुमान लगाता है $$l=\lceil \text{number of objects} / \text{capacity}\rceil
 * ओवरलैप मिनिमाइजिंग टॉप-डाउन (ओएमटी): टॉप-डाउन दृष्टिकोण का उपयोग करके एसटीआर में सुधार जो स्लाइस के बीच ओवरलैप को कम करता है और क्वेरी प्रदर्शन में सुधार करता है।
 * प्राथमिकता आर-वृक्ष

यह भी देखें

 * खंड वृक्ष
 * अंतराल ट्री - एक आयाम ( समान्यत:समय) के लिए एक पतित आर-वृक्ष।
 * के-डी वृक्ष
 * बाउंडिंग वॉल्यूम पदानुक्रम
 * स्थानिक सूचकांक
 * जीआईएसटी