मैक्स-हेपाइज़ में सबसे खराब मामला - आपको 2n / 3 कैसे मिलता है?


81

CLRS में, तीसरे संस्करण में, पृष्ठ 155 पर, यह दिया जाता है कि MAX-HEAPIFY में,

बच्चों के प्रत्येक का आकार अधिकतम 2n / 3 होता है - सबसे खराब स्थिति तब होती है जब पेड़ का निचला स्तर बिल्कुल आधा भरा होता है।

मैं समझता हूं कि जब पेड़ का निचला स्तर ठीक आधा भरा होता है तो यह सबसे खराब क्यों होता है। और इस सवाल का जवाब MAX-HEAPIFY में सबसे खराब स्थिति में दिया गया है: "सबसे खराब स्थिति तब होती है जब पेड़ का निचला स्तर बिल्कुल आधा भरा होता है"

मेरा सवाल है कि 2n / 3 कैसे प्राप्त करें?

क्यों अगर नीचे का स्तर आधा भरा है, तो बच्चे के पेड़ का आकार 2n / 3 तक है?

कैसे गणना करें?

धन्यवाद


5
इस ब्लॉग पर एक सरल गणना प्रदान की गई है: bit.ly/138f43F
उर्फ़हन

जवाबों:


65

एक पेड़ में जहां प्रत्येक नोड में या तो 0 या 2 बच्चे हैं, 0 बच्चों के साथ नोड्स की संख्या 2 बच्चों के साथ नोड्स की संख्या से एक अधिक है। {स्पष्टीकरण: ऊंचाई एच पर नोड्स की संख्या 2 ^ h है, जो कि एक ज्यामितीय श्रृंखला का योग सूत्र बराबर होता है (ऊंचाई 0 से h-1 तक नोड्स का योग) + 1; और ऊंचाई 0 से h-1 तक के सभी नोड्स बिल्कुल 2 बच्चों वाले नोड हैं}

    ROOT
  L      R
 / \    / \
/   \  /   \
-----  -----
*****

आर में नोड्स की संख्या k होने दो। L में नोड्स की संख्या k + (k + 1) = 2k + 1. नोड्स की कुल संख्या n = 1 + (2k + 1) + k = 3k + 2 है। (रूट प्लस एल प्लस आर)। अनुपात (2k + 1) / (3k + 2) है, जो ऊपर 2/3 से घिरा है। कोई निरंतर 2/3 से कम काम नहीं करता है, क्योंकि k के रूप में अनंत की सीमा 2/3 है।


2
हाँ, मैं समझ गया, आपका मतलब है एल / एन = 2/3
जैक्सन टेल

7
वाह। वह गहरा था। आपने इसे अपने आप कैसे समझ लिया?
नोब ऑक्ट

38

Understand the maximum number of elements in a subtree happens for the left subtree of a tree that has the last level half full.Draw this on a piece of paper to realize this.

एक बार स्पष्ट हो जाने के बाद, 2N / 3 की सीमा को प्राप्त करना आसान है।

आइए हम मानते हैं कि पेड़ में कुल नोड्स की संख्या एन है।

पेड़ में नोड्स की संख्या = 1 + (बाएं सबट्री में नोड्स की संख्या) + (दाएं उपशीर्षक में नोड्स की संख्या)

हमारे मामले के लिए जहां पेड़ का अंतिम स्तर आधा भरा हुआ है, iF हम मानते हैं कि सही सबट्री ऊँचाई h की है, तो बाएँ सबट्री अगर ऊँचाई (h + 1):

लेफ्ट सबट्री में नोड्स की संख्या = 1 + 2 + 4 + 8 .... 2 ^ (एच + 1) = 2 ^ (एच + 2) -1 ..... (i)

राइट सबट्री में नोड्स की संख्या = 1 + 2 + 4 + 8 .... 2 ^ (एच) = 2 ^ (एच + 1) -1 ..... (ii)

इस प्रकार, में प्लगिंग:

पेड़ में नोड्स की संख्या = 1 + (बाएं सबट्री में नोड्स की संख्या) + (दाएं उपशीर्षक में नोड्स की संख्या)

=> N = 1 + (2^(h+2)-1) + (2^(h+1)-1)

=> N = 1 + 3*(2^(h+1)) - 2

=> N = 3*(2^(h+1)) -1

=> 2^(h+1) = (N + 1)/3

इस मान में समीकरण (i) में प्लगिंग, हम प्राप्त करते हैं:

Number of nodes in Left Subtree = 2^(h+2)-1 = 2*(N+1)/3 -1 =(2N-1)/3 < (2N/3)

इसलिए एन नोड्स वाले एक पेड़ के लिए एक उपप्रकार में नोड्स की अधिकतम संख्या पर ऊपरी 2N / 3 है।


मुझे अभी भी समझ नहीं आया। नहीं होगा तो भी पूरा नहीं होगा, आधा भरा क्यों होना है। कोई समझाता है - मैं भ्रमित हूँ।
सुंदर राजन

1
@SundarRajan check math.stackexchange.com/questions/181022/… विशेषकर भागThis is the most the heap can get imbalanced; adding another node will either begin to rebalance the heap (by filling out the other, right, half of the last level) or break the heap's shape property of being a complete binary tree
मोमो

अच्छी व्याख्या।
ईगल

14

ऊंचाई के पूर्ण बाइनरी ट्री के लिए h, नोड्स की संख्या है f(h) = 2^h - 1। उपरोक्त मामले में हमारे पास नीचे आधा भरा हुआ लगभग पूरा बाइनरी ट्री है। हम इसके संग्रह के रूप में कल्पना कर सकते हैं root + left complete tree + right complete tree। यदि मूल वृक्ष की hऊँचाई है , तो बाएँ h - 1और दाएँ की ऊँचाई है h - 2। तो समीकरण बन जाता है

n = 1 + f(h-1) + f(h-2) (1)

हम के f(h-1)रूप में व्यक्त के लिए ऊपर हल करना चाहते हैंn

f(h-2) = 2^(h-2) - 1 = (2^(h-1)-1+1)/2 - 1 = (f(h-1) - 1)/2 (2)

हमारे (1) में ऊपर का उपयोग करना

n = 1 + f(h-1) + (f(h-1) - 1)/2 = 1/2 + 3*f(h-1)/2

=> f(h-1) = 2*(n-1/2)/3

इसलिए ओ (2 एन / 3)


9
क्या यह f (h) = 2 ^ (h + 1) - 1 नहीं है?
a_fan

बहुत बढ़िया जवाब। कृपया ठीक करें f (h) जैसा कि @afnrf
Ajay

2

स्वेन के जवाब में जोड़ने के लिए। कैसे (2k + 1) / ((3k + 2) 2/3 तक जाता है, जब k अनंत में जाता है,

Lim_ (k -> inf) (2k + 1) / (3k + 2) = Lim_ (k -> inf) k (2 + 1 / k) / k (3 + 2 / k) = Lim_ (k -> inf) ) (2 + 1 / k) / (3 + 2 / k)

सीमा लागू करें, और आपको 2/3 मिलता है


2

नोड की संख्या -

  • स्तर 0 यानी रूट 2 ^ 0 है
  • स्तर 1 2 ^ 1 है
  • स्तर 2 2 ^ 2 है
  • ...
  • स्तर n 2 ^ n है

लेवल 0 से लेवल n तक सभी नोड्स का योग,

  • एस = 2 ^ 0 + 2 ^ 1 + 2 ^ 2 + ... + 2 ^ एन

ज्यामितीय श्रृंखला योग नियम से हम जानते हैं कि

  • x ^ 0 + x ^ 1 + x ^ 2 + ... + x ^ (n) = (x ^ (n + 1) - 1) / (x-1)

एक्स = 2 को प्रतिस्थापित करते हुए, हम प्राप्त करते हैं

  • S = 2 ^ (n + 1) - 1. अर्थात 2 ^ (n + 1) = S + 1

जैसा कि 2 ^ (n + 1) स्तर n + 1 पर कुल नोड हैं, हम कह सकते हैं कि 0 बच्चों के साथ नोड्स की संख्या 2 बच्चों के साथ नोड्स की संख्या से एक अधिक है।

अब बायें सबट्री, राइट ट्री और टोटल में नोड्स की संख्या की गणना करें।

  • रूट = k के बाएं सबट्री में गैर-पत्ती नोड्स की संख्या मान लें।
  • उपर्युक्त तर्क के द्वारा, बाएं सबट्री या रूट = k + 1 में लीफ नोड्स की संख्या। रूट = k के राइट सबट्री में नॉन-लीफ नोड्स की संख्या के रूप में कहा जाता है कि पेड़ बिल्कुल आधा भरा हुआ है।

  • रूट के बायीं ओर उपप्रकार में नोड्स की कुल संख्या = k + k + 1 = 2k +

  • पेड़ में नोड्स की कुल संख्या, n = (2k + 1) + k + 1 = 3k + 2।
  • बाएं सबट्री और कुल नोड्स में नोड्स का अनुपात = (2k + 1) / (3k + 2) जो ऊपर 2/3 से घिरा है।

यह कहने का कारण यह है कि बच्चों के उपप्रकारों में प्रत्येक का आकार अधिकतम 2n / 3 है।

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