द्विआधारी पेड़ों के पूर्व और बाद के आदेश ट्रावेल्स की उपयोगिता


13

यह बहुत भोला हो सकता है, लेकिन मैं सोच रहा था, यह द्विआधारी पेड़ों (सादे, सॉर्ट किए गए और संतुलित), सभी ट्रैवर्सल प्रकारों के संदर्भ में है:

  • गहराई-पहला पूर्व-आदेश
  • गहराई-पहले-क्रम में
  • गहराई-पहला पोस्ट-ऑर्डर
  • चौड़ाई-पहले

पूर्व और बाद के आदेशों की वास्तविक उपयोगिता क्या है? मेरा मतलब है, क्या बाइनरी ट्री का कुछ प्रकार और / या कॉन्फ़िगरेशन है जिसमें प्री और / या पोस्ट-ऑर्डर ट्रैवर्सल अन्य दो पर (कुछ) लाभ (ओं) को देगा?

AFAICS, द्विआधारी पेड़ों के कुछ प्रकार और विन्यास हैं जिनके लिए ऑर्डर और चौड़ाई-पहले एक निश्चित लाभ दे सकते हैं:

  • संतुलित बाइनरी ट्री के लिए कोई भी गहराई-पहला ट्रैवर्सल पहले की तुलना में कम मेमोरी स्टोरेज स्पेस का उपयोग करेगा। उदाहरण के लिए (6 या 7 नोड्स के संतुलित बाइनरी ट्री के लिए, ऊंचाई 2 है, इसलिए किसी भी डेप्थ-फर्स्ट ट्रैवर्सल को अधिकतम स्टोर करने की आवश्यकता होगी। किसी भी समय 2 नोड्स, जबकि अंतिम स्तर में 3 या 4 नोड्स होते हैं इसलिए चौड़ाई-पहले ट्रैवर्सल को कुछ बिंदु पर 3 या 4 नोड्स तक संग्रहीत करने की आवश्यकता होगी)। इस मामले में इन-ऑर्डर ट्रैवर्सल का उपयोग करके कम से कम मेमोरी का उपयोग किया जाता है और उनके प्राकृतिक क्रम में नोड्स का दौरा किया जाता है।

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

हालाँकि, मैं ऐसी स्थिति के बारे में नहीं सोच सकता जहाँ पूर्व और बाद के ट्रैवर्सल अन्य दो पर एक फायदा दे।

जवाबों:


13

आपको पेड़ों के साथ विभिन्न चीजें करने की ज़रूरत है, जैसे डेटा संरचना और कुछ सीरियल प्रतिनिधित्व के बीच अनुवाद करना, जैसे फ़ाइल पर या किसी भाषा में।

इसलिए, उदाहरण के लिए, मान लीजिए कि आपके पास इस तरह एक पार्स ट्री है:

    *
   / \
  +   \
 / \   \
A   B   C

आप * + A B Cइसे उपसर्ग क्रम में चलते हुए या इसे उपसर्ग क्रम में चलते हुए क्रमबद्ध कर सकते हैं A B + C *। यदि आप सभी भाषा प्रोसेसर के साथ काम करते हैं, तो ऐसी चीजों को दूसरे स्वभाव का होना चाहिए।


बहुत अच्छा उदाहरण! और ध्यान दें कि इन-ऑर्डर-ट्रैवर्सल कैसे निकलेगा A + B * C, जो सामान्य उपयोगकर्ताओं के लिए पोस्टफिक्स ऑर्डर के उपसर्ग की तुलना में समझना बहुत आसान है।
किलन फ़ॉथ

3
@ केलियानफोथ को छोड़कर वह नहीं है जो पेड़ कहता है - यह कहता है (ए + बी) * सी, कम से कम मेरी आंखों के लिए। हालांकि मेरे HP-28s उंगलियों की तरह एबी + सी * संस्करण ठीक है। :-)
sdg

@ किलियन: sdg सही है। इनवर्टर के साथ, आपको पहले से संबंधित होना चाहिए, जब तक कि आप हर चीज के आसपास कोष्ठक नहीं डालते।
माइक डनलवे

13

विकिपीडिया लेख जब आप गहराई-पहले खोज के विभिन्न प्रकार का उपयोग करना चाहते हैं का एक अच्छा संक्षिप्त विवरण दिया गया है:

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

यह एक एल्गोरिथम की लॉजिस्टिक जरूरतों के लिए उबालता है। उदाहरण के लिए, यदि आप विलोपन के दौरान पोस्ट-ऑर्डर ट्रैवर्सल का उपयोग नहीं करते हैं, तो आप उन संदर्भों को खो देते हैं जिनकी आवश्यकता आपको बाल पेड़ों को हटाने के लिए होती है।


10 नवंबर, 2019 तक विकिपीडिया बदल गया और पहला विवरण पोस्ट-ऑर्डर का भी है, जो भ्रामक है। यही कारण है कि मैं यहाँ समाप्त हो गया, जानकारी के दूसरे स्रोत की तलाश में।
हूवन

5

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

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

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