सक्सेज डाटा स्ट्रक्चर एल्गोरिदम के लिए एक अच्छे अवलोकन की आवश्यकता है


14

(पहले से ही मुख्य साइट पर पूछा गया है , लेकिन बेहतर कवरेज के लिए यहां भी पूछ रहा है, क्षमा करें)

चूँकि मुझे सुक्युटी डेटा स्ट्रक्चर्स के बारे में पता था कि मैं उस क्षेत्र के हालिया घटनाक्रमों के अच्छे अवलोकन की सख्त ज़रूरत हूँ।

मैंने बहुत सारे लेख पढ़े हैं और मैंने अपने सिर के ऊपर से अनुरोधों पर Google परिणामों के शीर्ष पर देखा है। मुझे अभी भी संदेह है कि मैंने यहां कुछ महत्वपूर्ण याद किया है।

यहाँ मेरे लिए विशेष रुचि के विषय हैं:

  1. माता-पिता, बाएं / दाएं बच्चे, एक सबट्री में तत्वों की संख्या प्राप्त करने के कुशल संचालन के साथ बाइनरी पेड़ों की सुसाइड एन्कोडिंग।

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

  2. बाहरी चर-लंबाई की वस्तुएं बाहरी मेमोरी में एरेज़ करती हैं। सरणियाँ अपरिवर्तनीय हैं: मुझे आइटम जोड़ने / हटाने / संपादित करने की आवश्यकता नहीं है। एकमात्र आवश्यकता हे (1) तत्व पहुंच समय और जितना संभव हो उतना कम ओवरहेड, बेहतर और फिर सीधे ऑफसेट और आकार दृष्टिकोण। यहाँ कुछ आँकड़े हैं जो मैंने अपने कार्य के लिए विशिष्ट डेटा के बारे में एकत्रित किए हैं:

    आइटमों की विशिष्ट संख्या - लाखों की संख्या में, दसियों मिल तक;

    लगभग 30% वस्तुओं की लंबाई 1 बिट से अधिक नहीं है ;

    40% -60% वस्तुओं की लंबाई कम है तो 8 बिट्स;

    32 और 255 बिट्स (255 बिट्स की सीमा होती है) के बीच केवल कुछ ही वस्तुओं की लंबाई होती है

    औसत आइटम लंबाई ~ 4 बिट +/- 1 बिट।

    आइटम की लंबाई का कोई अन्य वितरण सैद्धांतिक रूप से संभव है लेकिन सभी व्यावहारिक रूप से दिलचस्प मामलों में ऊपर वर्णित के करीब आंकड़े हैं।

किसी भी जटिलता के लेखों के लिंक, किसी भी अस्पष्टता के ट्यूटोरियल, अधिक या कम प्रलेखित सी / सी ++ लाइब्रेरीज़, - कुछ भी जो आपके लिए समान कार्यों में उपयोगी था या जो आपके शिक्षित अनुमान से ऐसा दिखता है - ऐसी सभी चीजों की सराहना की जाती है।

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

इसके अलावा, ठेठ पेड़ में नोड्स के मिलर हैं और उन्हें पूरी तरह से रैम में संग्रहीत नहीं किया जाना चाहिए।

जवाबों:


12

मेरा मानना ​​है कि आप सक्सेज एक्सटर्नल मेमोरी डेटा स्ट्रक्चर्स में रुचि रखते हैं जो व्यवहार में कुशल हैं। उस मामले में, आप शायद कुछ बुनियादी तकनीकों और कुछ इंजीनियरिंग के साथ जो चाहें प्राप्त कर सकते हैं।

पेड़ों के लिए, मैं Arroyuelo et al पढ़ने के साथ शुरू करूँगा । अभ्यास में रसीला पेड़ । कागज मुख्य स्मृति में पेड़ों से संबंधित है, लेकिन अधिकांश तकनीकों का उपयोग बाहरी मेमोरी में नीचे के समान विकल्पों के साथ किया जा सकता है।

γδBB

nSnS[i]=1ijrank(j)

यदि आप रैंक इंडेक्स को छोटा रखना चाहते हैं, तो आपको उपरोक्त मूल समाधान सीपीयू-सघन बनाते हुए ब्लॉक का आकार काफी बड़ा (संभवतः किलोबाइट या किलोबाइट के दसियों) करना होगा। इसे डिस्क पर संग्रहीत ब्लॉकों में थोड़ा ओवरहेड जोड़कर हल किया जा सकता है। मूल रूप से आप एक ही समाधान को पुनरावर्ती रूप से लागू करते हैं, ताकि प्रत्येक डिस्क ब्लॉक कई छोटे ब्लॉकों के साथ-साथ एक अन्य रैंक इंडेक्स को स्टोर करे। जब आपने सही डिस्क ब्लॉक को पुनः प्राप्त कर लिया है, तो आप पूरे ब्लॉक को डिकोड करने के बजाय, सही छोटे ब्लॉक को डिकोड करने के लिए खोजने के लिए इसके भीतर रैंक इंडेक्स का उपयोग करते हैं। इस सेकेंडरी इंडेक्स के साथ, रैंडम एक्सेस शायद सबसे तेज़ सॉलिड-स्टेट ड्राइव उपलब्ध होने के साथ I / O- बाउंड हो जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.