स्थानिक / लौकिक प्रदर्शन में ओक्ट्रीस के फायदे क्या हैं या अन्यथा, और वे किन परिस्थितियों में सबसे अधिक लागू होते हैं (मैंने 3D वीडियो प्रोग्रामिंग सुना है)?
केडी के पेड़ संतुलित द्विआधारी पेड़ हैं और अष्टक की कोशिश की जाती है ताकि फायदे और नुकसान संभवतः उन सामान्य डेटा संरचनाओं से विरासत में मिले। विशेष रूप से:
- रीबैलेंसिंग महंगी हो सकती है (ऑक्ट्रेसेस को रीबैलेंसिंग की जरूरत नहीं है)।
- संतुलन, विषमता को बेहतर ढंग से संभालता है क्योंकि यह अनुकूली है।
- अष्टक में उच्च शाखा कारक का मतलब है कि सजातीय वृक्ष (कम अप्रत्यक्ष और आवंटन) सजातीय वितरण के लिए।
इसके अलावा, द्विभाजन (जैसा कि अष्टक में होता है) बिट-टिडलिंग के संदर्भ में तुच्छ कार्यान्वयन के लिए उधार देता है। इसी तरह, मुझे लगता है कि रेंज लुकअप करते समय ऑक्ट्रेस्ट प्री-कॉम्पीटेड डिस्टेंस से बहुत लाभ उठा सकते हैं।
संपादित करें
जाहिर तौर पर कोशिशों और समरूपता के संदर्भ में मेरे स्पष्टीकरण की आवश्यकता है।
ट्रेस डेटा संरचनाओं का एक परिवार है जो शब्दकोशों के पेड़ों द्वारा प्रस्तुत किया जाता है और उन कुंजियों के लिए शब्दकोशों के रूप में उपयोग किया जाता है जो अनुक्रम होते हैं (सबसे उल्लेखनीय रूप से तार भी डीएनए अनुक्रम और बिट्स हैश कोशिशों के लिए एक हैश मान में)। यदि प्रत्येक डिक्शनरी में प्रत्येक x, y और z निर्देशांक में से एक बिट को मैप करता है (ट्राइ के पहले स्तर में सबसे महत्वपूर्ण बिट, दूसरे स्तर में अगला महत्वपूर्ण बिट आदि) तो ट्राइ एक ऑक्ट्री है जो समान रूप से 3 डी स्पेस को विभाजित करती है। इसलिए अष्टक उन विशेषताओं की विशेषताओं को प्राप्त करते हैं जो सामान्य तौर पर होती हैं:
- उच्च ब्रांचिंग कारक का मतलब उथले पेड़ों से हो सकता है, जो कुछ अप्रत्यक्ष रूप से खोज करते हैं, इसलिए यह तेजी से होता है, उदाहरण के लिए, बाइनरी ट्री के 20 स्तरों को 256 के ब्रांचिंग वाले पेड़ के 4 स्तरों में संग्रहीत किया जा सकता है।
- संतुलित द्विआधारी पेड़ों के लिए आवश्यक एक महंगे ऑपरेशन को बचाने के लिए, सम्मिलन और विलोपन के दौरान टीज़ को पुन: असंतुलित नहीं किया जाता है।
नुकसान यह है कि विषमता असंतुलित कोशिशों / अष्टक का परिणाम हो सकती है इसलिए खोजों को कई अप्रत्यक्ष की आवश्यकता हो सकती है। एक ही स्तर में अप्रत्यक्ष के कई स्तरों को खत्म करने के लिए एज कंप्रेशन का उपयोग करके कोशिशों में समतुल्य समस्या को हल किया जाता है। ऑक्टर्स ऐसा नहीं करते हैं, लेकिन आपको एक ऑक्ट्री को संपीड़ित करने से रोकने के लिए कुछ भी नहीं है (लेकिन मुझे नहीं लगता कि आप परिणाम को ऑक्ट्री कह सकते हैं!)।
तुलना के लिए, स्ट्रिंग कुंजियों के लिए एक विशेष शब्दकोश पर विचार करें जिसे एक ट्राइ के रूप में दर्शाया गया है। कुंजी में पहले चरित्र पर त्रिकोणीय शाखाओं का पहला स्तर। दूसरे चरित्र पर दूसरा स्तर और इसी तरह। किसी भी स्ट्रिंग को शब्दकोष में कुंजी से पहले वर्ण की खोज करके एक दूसरा शब्दकोष प्राप्त किया जा सकता है, जिसका उपयोग कुंजी से दूसरे वर्ण को देखने के लिए किया जाता है। यादृच्छिक कुंजी तार का एक सेट एक सजातीय वितरण होगा। मुख्य तार का एक सेट जो सभी कुछ उपसर्ग साझा करते हैं (उदाहरण के लिए "विरोधी" के साथ शुरू होने वाले सभी शब्द) एक विषम हैंवितरण। बाद के मामले में, पहले शब्दकोश में केवल एक बंधन होता है, "ए" के लिए, दूसरा केवल "एन" और इतने पर। त्रि में किसी भी मानचित्रण की खोज हमेशा एक ही चार शब्दकोशों के साथ एक ही चार शब्दकोशों की खोज करके की जाती है। यह अकुशल है और यह वही है जो अष्टक करते हैं, उदाहरण के लिए, वे विषम कण वितरण को संग्रहीत करने के लिए उपयोग किए जाते हैं, जहां कणों का विशाल बहुमत वेक्टर अंतरिक्ष के भीतर एक छोटी मात्रा में होता है।