नक्शों के एक पेड़ के लिए इष्टतम डेटा संरचना क्या है।


9

मैं एक डेटा संरचना की तलाश कर रहा हूं, जो मूल रूप से नक्शों का एक पेड़ है, जहां प्रत्येक नोड पर नक्शे में कुछ नए तत्व हैं, साथ ही इसके मूल नोड के नक्शे में तत्व भी हैं। यहाँ नक्शे से मेरा मतलब है कि चाबियाँ और मूल्यों के साथ एक प्रोग्रामिंग मैप, जैसे एसटीएल में नक्शा या अजगर में तानाशाही।

उदाहरण के लिए, रूट नोड हो सकता है:

root = {'car':1, 'boat':2}

और 2 बच्चे, प्रत्येक माता-पिता के नक्शे में एक तत्व जोड़ते हैं

child1 = {'car':1, 'boat':2, 'jet':35}
child2 = {'car':1, 'boat':2, 'scooter':-5}

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

मैं सोच रहा था कि शायद एक स्मार्ट हैश फ़ंक्शन है जो मैं इसके लिए उपयोग कर सकता हूं, लेकिन कुछ भी नहीं आ सका।

अनुभवहीन दृष्टिकोण प्रत्येक नोड पर एक नक्शे में नए जोड़े प्रविष्टियों को संग्रहीत करेगा और यदि कुछ नहीं मिला तो पेड़ को ऊपर ले जाएं। मुझे यह पसंद नहीं है क्योंकि यह पेड़ की गहराई पर निर्भर करता है।


इसलिए प्रत्येक नोड माता-पिता में संग्रहीत मानचित्र को परिष्कृत करने वाले मानचित्र का प्रतिनिधित्व करता है?
सुरेश वेंकट

भी, क्या आप का मतलब गणितीय या कार्टोग्राफिक अर्थ में नक्शा है?
सुरेश वेंकट

मेरा मतलब गणितीय / सीएस अर्थ में एक नक्शा है। उदाहरण के लिए एसटीएल में मानचित्र की तरह।
19

@ सुरेश: ऐसा लगता है कि यह शोधन नहीं है। अगर मुझे सवाल सही लगता है, तो एक बच्चा नोड अपने मूल नोड के नक्शे में नए तत्व जोड़ता है।
जुका सुओमेला

और पहले प्रश्न का उत्तर देने के लिए, प्रत्येक नोड इस अर्थ में मानचित्र को परिष्कृत करता है कि अधिक कुंजी / मूल्य जोड़े जोड़े जाते हैं।
19

जवाबों:


10

आपने यह नहीं कहा है कि प्रश्न क्या हैं, लेकिन मैं मान लूंगा कि एक नोड और एक कुंजी में क्वेरी () होती है और संबद्ध मूल्य (या शून्य यदि कोई ऐसा मूल्य मौजूद नहीं है) चाहता है। इस मामले में, मुझे लगता है कि सामान्य तौर पर आप हर नोड पर एक अलग नक्शा संग्रहीत करने से बेहतर नहीं कर सकते। उदाहरण के लिए एक कैटरपिलर के पेड़ पर विचार करें जहां प्रत्येक पथ नोड में एक नोड जुड़ा होता है जो बंद होता है (कुल 2n नोड्स)। इसे रास्ते के एक छोर पर जड़ें। मान लीजिए कि कुंजियों के लिए ब्रह्मांड का आकार m है। नोड वी और प्रत्येक संभव कुंजियों में से प्रत्येक के लिए कांटे की शकल के लिए, वह कुंजी या तो मौजूद हो सकती है या वी पर मौजूद नहीं हो सकती है, और दोनों आपके सबट्री कंस्ट्रक्शन के अनुपालन में होंगे। तो, वहाँ हैं2mn प्रत्येक कांटा नोड में प्रत्येक कुंजी मौजूद है या नहीं, इसके लिए संभावनाएं हैं, इसलिए आपको आवश्यक जानकारी संग्रहीत करने के लिए केवल स्थान की बिट्स की आवश्यकता है।


5
लेकिन यह उदाहरण नहीं दिखाता है कि आपको अनावश्यक जानकारी संग्रहीत करनी चाहिए (अर्थात, आपको प्रत्येक बच्चे पर रूट नोड की प्रविष्टियों की नकल करने की आवश्यकता है)!
जुका सुओमेला

मैं उलझन में हूं। गहराई के एक पेड़ में1 साथ में n यह स्पष्ट है कि आप स्टोर नहीं कर सकते m में बाँधना o(m)अंतरिक्ष। क्या आपका उदाहरण कुछ और दिखा रहा है?
रादु GRIGore

15

सबसे पहले, मुझे लगता है कि "मैप" से आपका क्या मतलब है, टीसीएस लिंगो में एक "शब्दकोश" है। दूसरा, मैं वाक्यांश नहीं समझता "आदर्श रूप से अभी भी लुकअप होगाO(logN)", क्योंकि एक डिक्शनरी में लुकअप में विभिन्न हैश टेबलों के साथ O (1) का समय लगता है। तीसरी बात, आपने यह नहीं बताया है कि समस्या स्थिर है या डायनामिक? मैं स्थैतिक मान रहा हूं।

इस समस्या की इष्टतम जटिलता है Θ(पूर्ववर्ती खोज), जैसे O(lglgN)वैन एमड बोस का उपयोग करना। यह इष्टतम है यदि आप शब्द का आकार हैΘ(lgn); इष्टतम पूर्ववर्ती सीमा के लिए http://people.csail.mit.edu/mip/papers/pred/pred.pdf देखें ।

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

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

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