बाइनरी ट्री की न्यूनतम ऊंचाई क्यों है


10

मेरे जावा वर्ग में, हम विभिन्न प्रकार के संग्रह की जटिलता के बारे में सीख रहे हैं।

जल्द ही हम बाइनरी पेड़ों पर चर्चा करेंगे, जिन्हें मैं पढ़ रहा हूं। पुस्तक बताती है कि एक बाइनरी ट्री की न्यूनतम ऊंचाई हैlog2⁡(n+1)−1, लेकिन आगे की व्याख्या की पेशकश नहीं करता है।

कोई समझा सकता है क्यों?


मैं इसे यहां समझाता हूं stackoverflow.com/a/13093274/550393
— 2cupsOfTech

जवाबों:


11

एक बाइनरी ट्री में गैर-पत्ती नोड्स पर 1 या 2 बच्चे और पत्ती नोड्स पर 0 नोड होते हैं। उसे वही रहने दोn एक पेड़ में नोड्स और हमें उन्हें इस तरह से व्यवस्थित करना होगा कि वे अभी भी एक वैध बाइनरी ट्री बनाते हैं।

साबित किए बिना, मैं कह रहा हूं कि ऊंचाई को अधिकतम करने के लिए, दिए गए नोड्स को रैखिक रूप से व्यवस्थित किया जाना चाहिए, अर्थात प्रत्येक गैर-पत्ती नोड में केवल एक बच्चा होना चाहिए:

                              O 1
                              |
                              O 2
                              |
                              O 3
                              |
                              O 4
                              |
                              O 5
                              |
                              O 6
                              |
                              O 7
                              |
                              O 8

यहां, नोड्स की संख्या के संदर्भ में ऊंचाई के संबंध की गणना करने का सूत्र सीधा-आगे है। अगरh पेड़ की ऊंचाई है, फिर h=n−1।

अब, अगर हम बाइनरी ट्री के निर्माण की कोशिश करते हैं nन्यूनतम ऊंचाई के साथ नोड्स (हमेशा एक पूर्ण द्विआधारी पेड़ के लिए reducible), हमें अगले स्तर पर जाने से पहले ऊपरी स्तरों में यथासंभव अधिक नोड्स पैक करना होगा। तो, पेड़ निम्नलिखित पेड़ का रूप लेता है:

                              O
                              |1
                              |
                       O------+-----O
                       |2           |3
                       |            |
                   O---+---O    O---+----O
                   |4      |5    6        7
                   |       |
               O---+--O    O
                8      9    10

हमें एक विशेष मामले से शुरू करते हैं, n=2m−1।

हम जानते हैं कि,

20+21+22+...+2m−1=2m−1

इसके अलावा, यह साबित करना आसान है कि, एक स्तर i अधिक से अधिक हो सकता है 2i इसमें नोड्स।

उपरोक्त राशि में इस परिणाम का उपयोग करते हुए, हम पाते हैं कि प्रत्येक स्तर के लिए i, से 0 सेवा m, वहाँ एक इसी शब्द मौजूद है 2i−1 के विस्तार में 2m−1। इसका मतलब है, कि एक पूर्ण बाइनरी ट्री2m−1 नोड्स पूरी तरह से भरे हुए हैं और ऊंचाई है, h(2m−1)=m−1, कहाँ पे h(n)= के साथ एक पूर्ण बाइनरी ट्री की ऊंचाई n नोड्स।

इस परिणाम का उपयोग करते हुए, h(2m)=m, पेड़ के साथ 2m−1 नोड्स पूरी तरह से भरे हुए हैं और इस प्रकार एक पेड़ है (2m−1)+1=2m नोड्स को अगले स्तर में अतिरिक्त नोड को समायोजित करना है m, 1 से ऊंचाई बढ़ाकर m−1 सेवा m।

अब तक हम साबित कर चुके हैं,

h(2m)=m,
h(2m+1)=m+1
साथ ही साथ,
h(2m+1−1)=m

इस प्रकार, ∀n∈Z,2m≤n<2m+1

m≤h(n)<m+1

लेकिन, दोनों ओर लॉग (बेस 2) लेते हुए,

m≤log2⁡(n)<m+1
m=⌊log2⁡(n)⌋

इस प्रकार, ∀n,n∈[2m,2m+1)

h(n)=m=⌊log2⁡(n)⌋

और हम इस परिणाम को सामान्य कर सकते हैं ∀n∈Z प्रेरण का उपयोग करना।

पुनश्च: वह पुस्तक जिसमें पूर्ण बाइनरी ट्री की ऊंचाई बताई गई है log2⁡(n+1)−1 सभी के लिए मान्य नहीं है n चूंकि log2⁡(n) अधिकांश पूर्णांकों के लिए गैर-अभिन्न मान देगा n (यानी सभी सही बाइनरी पेड़ों के लिए), लेकिन एक पेड़ की ऊंचाई पूरी तरह से अभिन्न है।


19

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

तो एक पूरी तरह से संतृप्त बाइनरी ट्री के साथ 4 स्तरों होगा 1+1⋅2+1⋅2⋅2+1⋅2⋅2⋅2 अधिकतम नोड्स और इसकी गहराई होगी 3। इस प्रकार यदि हमारे पास एक बाइनरी ट्री की गहराई है, तो हम बहुत आसानी से अधिकतम संख्या में नोड्स पा सकते हैं (जो तब होता है जब पेड़ पूरी तरह से संतृप्त होता है)। यदि आप अपने बीजगणित कक्षाओं से याद करते हैं तो यह केवल एक ज्यामितीय श्रृंखला है और इसलिए इसे इस तरह दर्शाया जा सकता है:

nodes=1+2+22+23+...+2depth=∑k=0depth2k=1−2depth+11−2.

तो चलो फिर से व्यवस्थित करें:

nodes=2depth+1−1,
फिर गहराई के लिए हल करें:
nodes+1=2depth+1log2⁡(nodes+1)=log2⁡(2depth+1)=depth+1log2⁡(nodes+1)−1=depth.
और तुम्हारा सूत्र है। अब यह ध्यान रखें कि केवल पूर्णांक मानों को पैदावार देता है जब हर पेड़ पूरी तरह से भरा होता है (एक 'सही' बाइनरी ट्री) ताकि यदि आप एक गैर-पूर्णांक मान प्राप्त करते हैं, तो राउंड अप करना याद रखें।

4

ऊंचाई को न्यूनतम रखने के लिए, यह देखना आसान है कि हमें संभवतः अंतिम को छोड़कर सभी स्तरों को भरने की आवश्यकता है। क्यों? अन्यथा, हम पिछले स्तरों के नोड्स को ऊपरी स्तरों में खाली स्लॉट में ले जा सकते हैं।

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

या तो मामले में, एच नहीं बदलता है। तो जिसका मतलब है कि आपके पास मेरे बाधा के साथ ऊंचाई एच का एक पूरा द्विआधारी पेड़ है । लेकिन मैंने अंतिम स्तर में काल्पनिक फलियाँ ग्रहण कीं (यदि आप अंतिम स्तर को नहीं भर सके)। तो यह वास्तव में है,

20+21+22+23+⋯+2h=2h+1−1≤n.
इतना न्यूनतम
h=lg⁡(n+1)−1.
लेकिन छत को लागू करें क्योंकि हम काल्पनिक फलियाँ जोड़ रहे हैं और उन्हें हटा नहीं रहे हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.