केडी-वृक्ष पर एक ऑक्ट्री का उपयोग कभी क्यों किया जाएगा?


32

मुझे वैज्ञानिक कंप्यूटिंग में कुछ अनुभव है, और बीएसपी (बाइनरी स्पेस विभाजन) अनुप्रयोगों के लिए बड़े पैमाने पर केडी-पेड़ों का उपयोग किया है। मैं हाल ही में 3-डी यूक्लिडियन रिक्त स्थान के विभाजन के लिए एक समान डेटा संरचना, ऑक्ट्रेसेस से अधिक परिचित हो गया हूं, लेकिन एक जो मैं इकट्ठा करता हूं, उससे निश्चित नियमित अंतराल पर काम करता है।

स्वतंत्रता अनुसंधान के एक बिट से संकेत मिलता है कि केडी-पेड़ आमतौर पर अधिकांश डेटासेट - निर्माण के लिए और क्वेरी के लिए प्रदर्शन में बेहतर होते हैं। मेरा सवाल यह है कि स्थानिक / लौकिक प्रदर्शन में ऑक्टर्स के फायदे क्या हैं या अन्यथा, और वे किन स्थितियों में लागू होते हैं (मैंने 3 डी ग्राफिक्स प्रोग्रामिंग सुना है)? दोनों प्रकार के फायदों और समस्याओं का सारांश मुझे सबसे अधिक भाता है।

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


मुझे ध्यान देना चाहिए कि केडी-ट्री और आर-ट्री दोनों (लेकिन ऑक्ट्रेसेस नहीं) विशेष रूप से के-निकटतम पड़ोसी खोजों को सुविधाजनक बनाने के लिए डिज़ाइन किए गए लगते हैं - वे इस अर्थ में तुलना कैसे करते हैं?
नॉर्डोरिन

एक नोट यह है कि केडी-पेड़ों ने छोटी गहराई की गारंटी दी है। संपीड़ित क्वाड पेड़ आपको वहां मिल सकते हैं, लेकिन कम सुविधाजनक हैं।
सुरेश वेंकट

@ सुरेश वेंकट: इसके लिए धन्यवाद। मैं संपीड़ित quadtrees से परिचित नहीं हूं, लेकिन क्या वे वास्तव में 3-डी स्थानिक प्रतिनिधि के लिए उपयुक्त होंगे? शायद एक "संकुचित ओक्ट्री" एनालॉग है।
नॉर्डोरिन

मैंने यह भी सुना है कि जब एक ज्ञात जेड-ऑर्डर (स्पेस-फिलिंग) वक्र होता है, तो ऑक्ट्रेसेस अधिक उपयुक्त होते हैं, लेकिन यहां तर्क पर बिल्कुल यकीन नहीं है।
नोल्डोरिन

जवाबों:


23

एक में कोशिकाओं पेड़, उच्च पहलू अनुपात हो सकता है octree कोशिकाओं घनीय होने की गारंटी है, जबकि। चूंकि यह एक सिद्धांत बोर्ड है, इसलिए मैं आपको सैद्धांतिक कारण बताऊंगा कि उच्च पहलू अनुपात एक समस्या क्यों है: लगभग निकटतम पड़ोसी प्रश्नों को हल करते समय जिन कोशिकाओं की आपको जांच करनी है, उन्हें नियंत्रित करने के लिए वॉल्यूम सीमा का उपयोग करना असंभव बना देता है।kD

अधिक विवरण में: यदि आप एक क्वेरी बिंदु लिए एक निकटतम पड़ोसी पड़ोसी के लिए -approximate पूछते हैं , और वास्तविक निकटतम पड़ोसी दूरी , तो आप आमतौर पर एक खोज के साथ समाप्त होते हैं जो अंदर से पहुंचने वाले प्रत्येक डेटा संरचना सेल की जांच करता है। आंतरिक त्रिज्या और बाहरी त्रिज्या साथ एक annulus या कुंडलाकार खोल के बाहर । यदि कोशिकाओं ने पहलू अनुपात को बांधा है, जैसा कि वे एक क्वाडट्री में हैं, तो ऐसी कोशिकाओं में अधिकतम हो सकता है, और आप क्वेरी के लिए समय पर अच्छे सीमा साबित कर सकते हैं। यदि पहलू अनुपात बाध्य नहीं है, जैसा कि -tree में, ये सीमाएं लागू नहीं होती हैं।क्ष ( 1 + ε ) 1 / ε - 1 कश्मीर डीϵqdd(1+ϵ)d1/ϵd1kD

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


4
सारिल हर-पेलेड की हाल की पाठ्यपुस्तक को संकुचित चतुष्कोणों के आधुनिक सारांश के लिए देखें।
जेफ

एक अच्छा मात्रात्मक सारांश, डेविड के लिए धन्यवाद। बस पुष्टि करने के लिए: "ब्रांचिंग अनुपात" के पर्याय "पहलू अनुपात" का आपका उपयोग है? मुझे निश्चित रूप से क्वैडर / ऑक्ट्रीज़ को छोड़ना होगा और शायद क्वैड्ट्रीज़ / ऑक्ट्रीज़ को भी संकुचित करना होगा।
नोल्डोरिन

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

मुझे "कोशिकाओं" में याद किया। अब समझ में आता है।
नोल्डोरिन

15

दोस्तों का एक समूह और मैं एक मजेदार पक्ष परियोजना के रूप में एक अंतरिक्ष-आरटीएस खेल पर काम कर रहे हैं। हम कंप्यूटर विज्ञान में सीखे गए बहुत सारे सामान का उपयोग कर रहे हैं, इसे अत्यधिक कुशल बनाने के लिए, जिससे हम बाद में बड़े पैमाने पर सेनाएँ बना सकें।

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


आह हाँ, मैंने यह पहले भी सुना है। केडी-पेड़ों के साथ सम्मिलन / विलोपन एक महंगा ऑपरेशन (पुनः संतुलन के कारण) है। मेरा मानना ​​है कि सर्वश्रेष्ठ-केस टाइम जटिलताएं अभी भी समान हैं ...
नोल्डोरिन

2
यह निर्भर करता है कि आप kd-tree को कैसे ठीक करते हैं। एक अच्छा सर्वश्रेष्ठ-केस टाइम जटिलता ऐसी चीज नहीं है जिसे मैं आमतौर पर लक्ष्य करता हूं: उदाहरण के लिए बोगोसॉर्ट में ओ (1) सर्वश्रेष्ठ-केस जटिलता है, लेकिन मुझे आशा है कि कोई भी इसका उपयोग नहीं करता है।
एलेक्स दस ब्रिंक

दुर्भाग्य से मुझे इन डेटा संरचनाओं पर सामान्य संचालन के लिए समय की जटिलताओं का कोई अच्छा सारांश नहीं मिल सकता है, लेकिन दिमाग में नहीं। औसत-केस टाइम जटिलता अक्सर व्यावहारिक होती है ...
नोल्डोरिन

1
मुझे सच में लगता है कि आप अभी भी बेहतर करेंगे अगर आपने सिर्फ केडी-ट्री का इस्तेमाल किया है जो कुल्हाड़ियों को चकमा देता है और बस अंतरिक्ष को बीच में विभाजित करता है। भारी SAH और अन्य मंझले कट्स को छोड़ दें और आप एक ऐसी चीज के साथ समाप्त करेंगे जो न केवल एक ओकट्री की तुलना में तेजी से खोज करती है, बल्कि तेजी से भी निर्माण करती है। चूंकि आप अंतरिक्ष को समान रूप से विभाजित कर रहे हैं जैसा कि आप एक ऑक्ट्री के साथ करेंगे, लेकिन बाइनरी ट्री के बजाय 8-एरी ट्री के साथ, जो भी आप हटाने से पहले कर रहे थे वह केडी-ट्री के साथ और अधिक जटिल नहीं होना चाहिए, क्योंकि यह 'समान रूप से समान रूप से स्थान दिया जाएगा। Ex: आप केवल N की गहराई से परे खाली नोड्स को निकाल सकते हैं
ड्रैगन एनर्जी

8

स्थानिक / लौकिक प्रदर्शन में ओक्ट्रीस के फायदे क्या हैं या अन्यथा, और वे किन परिस्थितियों में सबसे अधिक लागू होते हैं (मैंने 3D वीडियो प्रोग्रामिंग सुना है)?

केडी के पेड़ संतुलित द्विआधारी पेड़ हैं और अष्टक की कोशिश की जाती है ताकि फायदे और नुकसान संभवतः उन सामान्य डेटा संरचनाओं से विरासत में मिले। विशेष रूप से:

  • रीबैलेंसिंग महंगी हो सकती है (ऑक्ट्रेसेस को रीबैलेंसिंग की जरूरत नहीं है)।
  • संतुलन, विषमता को बेहतर ढंग से संभालता है क्योंकि यह अनुकूली है।
  • अष्टक में उच्च शाखा कारक का मतलब है कि सजातीय वृक्ष (कम अप्रत्यक्ष और आवंटन) सजातीय वितरण के लिए।

इसके अलावा, द्विभाजन (जैसा कि अष्टक में होता है) बिट-टिडलिंग के संदर्भ में तुच्छ कार्यान्वयन के लिए उधार देता है। इसी तरह, मुझे लगता है कि रेंज लुकअप करते समय ऑक्ट्रेस्ट प्री-कॉम्पीटेड डिस्टेंस से बहुत लाभ उठा सकते हैं।

संपादित करें

जाहिर तौर पर कोशिशों और समरूपता के संदर्भ में मेरे स्पष्टीकरण की आवश्यकता है।

ट्रेस डेटा संरचनाओं का एक परिवार है जो शब्दकोशों के पेड़ों द्वारा प्रस्तुत किया जाता है और उन कुंजियों के लिए शब्दकोशों के रूप में उपयोग किया जाता है जो अनुक्रम होते हैं (सबसे उल्लेखनीय रूप से तार भी डीएनए अनुक्रम और बिट्स हैश कोशिशों के लिए एक हैश मान में)। यदि प्रत्येक डिक्शनरी में प्रत्येक x, y और z निर्देशांक में से एक बिट को मैप करता है (ट्राइ के पहले स्तर में सबसे महत्वपूर्ण बिट, दूसरे स्तर में अगला महत्वपूर्ण बिट आदि) तो ट्राइ एक ऑक्ट्री है जो समान रूप से 3 डी स्पेस को विभाजित करती है। इसलिए अष्टक उन विशेषताओं की विशेषताओं को प्राप्त करते हैं जो सामान्य तौर पर होती हैं:

  • उच्च ब्रांचिंग कारक का मतलब उथले पेड़ों से हो सकता है, जो कुछ अप्रत्यक्ष रूप से खोज करते हैं, इसलिए यह तेजी से होता है, उदाहरण के लिए, बाइनरी ट्री के 20 स्तरों को 256 के ब्रांचिंग वाले पेड़ के 4 स्तरों में संग्रहीत किया जा सकता है।
  • संतुलित द्विआधारी पेड़ों के लिए आवश्यक एक महंगे ऑपरेशन को बचाने के लिए, सम्मिलन और विलोपन के दौरान टीज़ को पुन: असंतुलित नहीं किया जाता है।

नुकसान यह है कि विषमता असंतुलित कोशिशों / अष्टक का परिणाम हो सकती है इसलिए खोजों को कई अप्रत्यक्ष की आवश्यकता हो सकती है। एक ही स्तर में अप्रत्यक्ष के कई स्तरों को खत्म करने के लिए एज कंप्रेशन का उपयोग करके कोशिशों में समतुल्य समस्या को हल किया जाता है। ऑक्टर्स ऐसा नहीं करते हैं, लेकिन आपको एक ऑक्ट्री को संपीड़ित करने से रोकने के लिए कुछ भी नहीं है (लेकिन मुझे नहीं लगता कि आप परिणाम को ऑक्ट्री कह सकते हैं!)।

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


"अष्टक प्रयास कर रहे हैं"? इसके अलावा, "विषमता को बेहतर तरीके से संभालती है" से आपका क्या तात्पर्य है? सजातीय एक शब्द नहीं है जो मैंने पेड़ों के संबंध में सामना किया है।
नोल्डोरिन

2
"ऑक्ट्रेसेस को पुन: संतुलन की आवश्यकता नहीं है"? यह अष्टक के लिए बिल्कुल सही नहीं है जो विषम बिंदु वितरण को संग्रहीत करता है। वैकल्पिक रूप से, इस बात पर निर्भर करता है कि आप आमतौर पर "ऑक्टट्री" को कैसे परिभाषित करते हैं: एक ऑक्ट्री को रिबैलेंस करना केवल असंभव है , चाहे वह कितना भी वांछनीय क्यों न हो।
जेफ

@ नोल्डोरिन "अष्टक प्रयास कर रहे हैं"। हाँ। क्या आप जानते हैं कि एक तिकड़ी क्या है? en.wikipedia.org/wiki/Trie
जॉन हैरोप

@ नोल्डोरिन "सजातीय वह शब्द नहीं है जिसका मैंने पेड़ों के साथ सामना किया है"। मैं उस वितरण की समरूपता की बात कर रहा हूँ जिसका विभाजन किया जा रहा है। उदाहरण के लिए, जब एक 3 डी अंतरिक्ष में कणों का विभाजन होता है, तो एक ठोस में परमाणुओं को सजातीय रूप से वितरित किया जाता है जबकि ब्रह्मांड में सितारों को विषम रूप से वितरित किया जाता है। केडी के पेड़ विषम वितरण के लिए बेहतर होने की संभावना है क्योंकि उनकी जगह का उपखंड अनुकूली है।
जॉन हैरोप

@ J @ ɛ E "एक ऑक्ट्री को रीबैलेंस करना असंभव है"। ठीक यही मैं जिक्र कर रहा था। माफ़ करना अगर मेरे शब्दों में गड़बड़ थी।
जॉन हैरोप

2

ओकट्रस निरंतर मॉडल के लिए आधार डेटाटाइप के रूप में उपयोगी होते हैं, उदाहरण के लिए जेरिस फ्लो सॉल्वर देखें। द्रव गतिकी में जीवन काफी कठिन है, इसलिए यह जानना कि आपके सभी उप-आकारों का आकार केवल उनकी गहराई पर निर्भर करता है, एक सरल कारक होना चाहिए।

कैविएट: मैं फ्लूड डायनामिस्ट नहीं हूँ!


दिलचस्प। मैं निश्चित रूप से इस बात की सराहना कर सकता हूं कि ऑक्ट्रेस्स कंटीनम मॉडल के साथ काम करने के लिए सरल हैं ... मुझे आश्चर्य है कि हालांकि ग्राफिक्स प्रोग्रामिंग का कारण क्या है?
नोल्डोरिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.