2010-05-07 10 views
6

मैं एक स्कूल प्रोजेक्ट पर काम कर रहा हूं जिसमें एक लेट/लम्बा बिंदु लेना और स्थानों की एक ज्ञात सूची में शीर्ष पांच निकटतम बिंदु ढूंढना शामिल है। सूची को स्मृति में संग्रहीत किया जाना चाहिए, चेतावनी के साथ कि हमें "उचित डेटा संरचना" चुननी होगी - यानी, हम सभी जगहों को सरणी में बस स्टोर नहीं कर सकते हैं और एक रैखिक फैशन में एक-एक करके दूरी की तुलना कर सकते हैं। शिक्षक ने उन स्थानों के लिए दूरी की गणना रोकने के लिए अमेरिकी राज्य द्वारा स्थान डेटा को समूहीकृत करने का सुझाव दिया जो स्पष्ट रूप से बहुत दूर हैं। मुझे लगता है कि मैं बेहतर कर सकता हूं।आर वृक्ष 50,000 फुट सिंहावलोकन?

मेरे शोध से ऑनलाइन यह एक आर-ट्री जैसा लगता है या इसके रूपों में से एक एक साफ समाधान हो सकता है। दुर्भाग्यवश, वह वाक्य है जहां तक ​​मुझे वास्तविक तकनीक को समझने के साथ मिल गया है, क्योंकि साहित्य मेरे गैर-शैक्षिक सिर के लिए बहुत घना है।

  • किसी ने मुझसे क्या प्रक्रिया अक्षांश/देशांतर डेटा के साथ एक आर-ट्री को आबाद करने, और फिर पेड़ traversing एक भी बिंदु के उन 5 निकटतम पड़ोसियों को खोजने के लिए है की एक बहुत उच्च सिंहावलोकन दे सकते हैं?

  • इसके अतिरिक्त परियोजना सी में है, और मुझे इस पर पहिया को फिर से शुरू करने की आवश्यकता नहीं है, इसलिए यदि आपने आर वृक्ष के मौजूदा ओपन सोर्स सी कार्यान्वयन का उपयोग किया है तो मुझे आपके अनुभवों में दिलचस्पी होगी।

अद्यतन:This blog post एक क्षेत्रीय विभाजित अंतरिक्ष (एक जनसंपर्क quadtree की तरह) के लिए एक सीधा खोज एल्गोरिथ्म वर्णन करता है। उम्मीद है कि भविष्य के पाठक की मदद करता है।

+0

http://www.rtreeportal.org/ पर एक नज़र डालें, कुछ कार्यान्वयन के लिए पॉइंटर्स हैं। ध्यान दें कि मुझे अभी तक एक सी कार्यान्वयन देखना है जो बकवास नहीं है। – avakar

+0

अपर्याप्त के रूप में बकवास, या बकवास के रूप में संकलित नहीं होगा? पूर्व मेरे उद्देश्यों के लिए ठीक है। :-) – roufamatic

+0

बकवास "मॉलोक और अन्य समान अपराधों के परिणाम की जांच नहीं करता है"। मुझे नहीं पता कि यह होमवर्क उद्देश्यों के लिए ठीक है या नहीं। :) – avakar

उत्तर

7

क्या आपने वैकल्पिक डेटा संरचनाओं पर विचार किया है? मेरा मानना ​​है कि, आर-पेड़ के बजाय प्वाइंट क्वाड्री आपकी ज़रूरत के लिए अधिक प्रभावी होगा। Spatial Index Demos आर-पेड़ और प्वाइंट क्वाड्री सहित संभावित डेटा संरचनाओं की सूची के लिए कुछ डेमो प्रदान करता है। उम्मीद है कि यह एक अंतर्दृष्टि देता है।

+1

+1 - यदि आपको केवल अंक स्टोर करने की आवश्यकता है तो एक ट्रैक्टर पेड़ नौकरी करेगा और लागू करने के लिए काफी सरल है। आर-पेड़ मनमाने ढंग से आकार के लिए बाउंडिंग बॉक्स को ओवरलैप करने की अनुमति देते हैं और ओपी को इसकी आवश्यकता नहीं दिखती है। – ConcernedOfTunbridgeWells

+0

स्थानिक इंडेक्स डेमो ने वास्तव में मुझे यह सामान ग्रोक करने में मदद की, धन्यवाद! – roufamatic

+0

जहां तक ​​मुझे पता है, एक आरटीआई इंडेक्स सीधे के-निकटतम पड़ोसी प्रश्नों का उत्तर दे सकता है जबकि क्वाड्रिस नहीं कर सकते हैं। चूंकि यह ओपी का उद्देश्य है, क्या यह अधिक प्रत्यक्ष नहीं होगा? –

5

क्वाड पेड़

एक ट्रैक्टर पेड़ अंतरिक्ष के एक वर्ग ले जाता है और एक्स और वाई अक्ष के साथ आधा आयामों के साथ चार बच्चों में विभाजित।

+---+---+ 
| | | Each square is a child 
| | | of the parent; when you 
+---+---+ get to leaves a node has 
| | | a single point or a list 
| | | of points. 
+---+---+ 

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

संतुलन एक ट्रैक्टर पेड़ अपने उद्देश्यों के लिए आवश्यक नहीं हो सकता और पाठक के लिए एक व्यायाम के रूप में छोड़ दिया जाता है - 'संतुलित ट्रैक्टर पेड़' के लिए वेब

नोट पर खोज का प्रयास है कि इस डेटा संरचना सूचकांक आइटम नहीं कर सकते हैं जो कर सकते हैं ओवरलैप करें, लेकिन यदि आप केवल अंक संग्रहीत कर रहे हैं तो यह कोई समस्या नहीं होगी।

एक ट्रैक्टर पेड़

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

  • ट्रैक्टर पेड़ अपनी बात युक्त नोड का पता लगाएँ, अपने माता-पिता की एक सूची रखते हुए।

  • एक प्राथमिकता (कर्ण प्रति पाइथागोरस प्रमेय की लंबाई से अर्थात्) अपने आधार बिंदु से उनकी दूरी के आधार पर कतार में नोड में अंक के सभी पुश। कार्यान्वयन पर के आधार पर प्रति एक या अधिक नोड हो सकता है। प्राथमिकता कतार डेटा संरचना के कार्यान्वयन के लिए, 'बाइनरी ढेर' देखें।

  • यदि कोई भी 'एन' बिंदु आगे है तो बाउंडिंग बॉक्स के किनारे, अपने पड़ोसियों की सामग्री जोड़ें। यानी यदि आपका आधार बिंदु बाउंडिंग बॉक्स के किनारे के करीब है, तो यह संभव है कि पड़ोसी पेड़ नोड्स में ऐसे अंक हो सकते हैं जो आपके बाउंडिंग बॉक्स में पाए गए बिंदुओं के करीब हैं। ऐसा करने के लिए आपको पेड़ का बैक अप लेना होगा, यही कारण है कि आपको अपने माता-पिता नोड्स का ट्रैक रखने की आवश्यकता है।

  • जब सभी 'एन' निकटतम बिंदु आपके बाउंडिंग बॉक्स के किनारों के करीब होते हैं तो आप जानते हैं कि संभवतः पड़ोसी नहीं हो सकते हैं जिन्हें आपने याद किया है। इसलिए, इस बॉक्स के भीतर 'एन' निकटतम बिंदु आपके 'एन' निकटतम पड़ोसियों होना चाहिए।

संबंधित मुद्दे