2009-11-22 22 views
12

ठीक है, तो यह ऐसा कुछ है जो हमेशा मुझे परेशान करता है। पेड़ डेटा संरचना मैं के बारे में पता कर रहे हैं:मैं कैसे निर्धारित करूं कि किस प्रकार की वृक्ष डेटा संरचना चुनने के लिए?

  • असंतुलित द्विआधारी पेड़
  • AVL पेड़
  • लाल-काले पेड़ों
  • 2-3 पेड़
  • बी पेड़
  • बी * -trees
  • प्रयास
  • ढेर

मैं कैसे निर्धारित करूं कि नौकरी के लिए किस प्रकार का पेड़ सबसे अच्छा उपकरण है? जाहिर है ढेर प्राथमिकता कतार बनाने के लिए इस्तेमाल किया जाता है। लेकिन उनमें से बाकी एक ही काम करने के अलग-अलग तरीके हैं। नौकरी के लिए सबसे अच्छा चुनने का कोई तरीका है?

+1

आप एंडर्सन पेड़ (जिसे एए पेड़ भी कहा जाता है) गायब हैं, जो 2-3 पेड़ के बराबर है और इसमें लाल-काले पेड़ के समान प्रदर्शन विशेषताएं हैं, लेकिन – Christoph

+1

को लागू करना आसान है जैसे पेड़ की तरह डेटा संरचना – swegi

+4

और निर्धारिती छोड़ने की सूची है! – Anna

उत्तर

26

चलिए उन्हें एक-एक करके चुनते हैं, क्या हम?

  • असंतुलित द्विआधारी पेड़

खोज कार्यों के लिए, कभी नहीं। असल में, उनकी प्रदर्शन विशेषताओं पूरी तरह से अप्रत्याशित हो जाएगी और एक पेड़ को संतुलित करने के ऊपरी हिस्से में इतनी बड़ी नहीं होगी कि असंतुलित पेड़ों को एक व्यवहार्य विकल्प बना दिया जा सके।

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

  • AVL पेड़

वे विकसित करने के लिए आसान कर रहे हैं लेकिन उनके प्रदर्शन आम तौर पर अन्य संतुलन रणनीतियों से ही पीछे रह जाता है क्योंकि उनमें संतुलन अपेक्षाकृत समय गहन है। Wikipedia claims कि वे लुकअप-गहन परिदृश्य में बेहतर प्रदर्शन करते हैं क्योंकि उनकी ऊंचाई सबसे खराब स्थिति में थोड़ा कम है।

  • लाल-काले पेड़ों

ये रूप में अच्छी तरह और शायद कुछ अन्य मानक पुस्तकालयों में सी ++ 'std::map implemenations के सबसे अंदर किया जाता है। हालांकि, good evidence है कि वे आधुनिक CPUs के कैशिंग व्यवहार के कारण में प्रत्येक परिदृश्य में बी (+) पेड़ से वास्तव में बदतर हैं। ऐतिहासिक रूप से, जब कैशिंग महत्वपूर्ण (या उतनी अच्छी नहीं) थी, तो मुख्य स्मृति में उपयोग किए जाने पर वे बी पेड़ों को पार करते थे।

  • 2-3 पेड़
  • बी पेड़
  • बी * -trees

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

मुझे उनके बीच अंतर करने के लिए कोई अच्छा, सामान्य नियम नहीं पता है।

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

प्रयास की तुलना में किया जाना चाहिए, और के खिलाफ, प्रत्यय पेड़, प्रत्यय सरणियों और q-ग्राम सूचकांक ऑफसेट - इतना नहीं अन्य खोज के पेड़ के खिलाफ क्योंकि डेटा है कि वे खोज अलग है: बजाय एक कॉर्पस में अलग शब्दों के, बाद वाले सूचकांक संरचना कारक खोज की अनुमति देते हैं।

  • ढेर

आप पहले से ही कहा है, वे सब पर पेड़ की खोज नहीं कर रहे हैं।

+0

+1 बहुत अच्छा जवाब। –

0

इनमें से प्रत्येक में सम्मिलन, हटाना और पुनर्प्राप्ति के लिए अलग-अलग जटिलता है, सभी में ज्यादातर ओ लॉग (एन) पहुंच के समय होते हैं।

5

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

आप आमतौर पर विकिपीडिया पर किसी भी प्रकार की डेटा संरचना के लिए सामान्य विशेषताओं को पा सकते हैं। आपके द्वारा सूचीबद्ध अधिकांश डेटा संरचनाओं पर Introduction to Algorithms में कम से कम एक अनुभाग (कुछ मामलों में एक संपूर्ण अध्याय) है, इसलिए यह एक और अच्छा संदर्भ है।

+1

मैं अंततः उस पुस्तक के माध्यम से खुदाई करने की योजना बना रहा था। मुझे लगता है कि इसमें शामिल होने से पहले मुझे क्या ध्यान देना चाहिए, इसका एक समग्र विचार प्राप्त करना आम तौर पर आसान होता है। :-) –

+0

@ जेसन: मुद्रित सामग्रियों के माध्यम से पोरिंग करने से पहले, मैं वही काम करता हूं, विकिपीडिया और एसओ पहले जांचता हूं। –

0

प्रत्येक पेड़ में विशिष्ट विशेषताएं होती हैं जो उन्हें एक निश्चित तरीके से उपयोगी बनाती हैं। आपको अपनी जरूरतों के साथ विशेषताओं की तुलना करनी चाहिए।

4

इसी प्रकार के प्रश्न: When to choose RB tree, B-Tree or AVL tree?

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

यदि आपकी प्रदर्शन आवश्यकताओं वास्तव में चरम हैं, तो कोनराड रुडॉल्फ का शानदार जवाब पढ़ें।:)

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