आपका समाधान मान्य है और d -ary ढेर की परिभाषा इस प्रकार है । लेकिन जैसा कि आपने बताया कि आपकी धारणा थोड़ी परिष्कृत है।
आप उन दो निम्नलिखित कार्यों का उपयोग की मूल पुनः प्राप्त करने के सकता है मैं मई के तत्व और जे के मई के बच्चे मैं मई के तत्व।
d-ary-parent(i) return ⌊(i−2)/d+1⌋
d-ary-child(i,j) return d(i−1)+j+1
स्पष्ट रूप से । आप उन कार्यों की जाँच कर सकते हैं जो उस जाँच कर रहे हैं1≤j≤dd-ary-parent(d-ary-child(i,j))=i
इसके अलावा आसान देखने के लिए कि द्विआधारी ढेर के विशेष प्रकार है -ary ढेर जहां , यदि आप स्थानापन्न के साथ , तो आप यह है कि वे कार्यों माता पिता, वाम से मेल खाते हैं और दाएं पुस्तक में उल्लेख किया देखेंगे।dd=2d2
यदि मैं आपके उत्तर को सही ढंग से समझता हूं तो आप एक ज्यामितीय प्रगति का उपयोग करते हैं । आपके मामले में आपको , जो स्पष्ट रूप से , जो वास्तव में एक वैध और सही समाधान है। लेकिन निरंतर उतार-चढ़ाव से निपटने के लिए आप लिखना चाह सकते हैं ।h=logd(nd−1+1)−1logd(nd)−1=logd(n)+logd(d)−1=logd(n)+1−1=logd(n)Θ(logd(n))
इसका कारण यह है कि कुछ ढेर संतुलित नहीं हो सकते हैं, इसलिए उनका सबसे लंबा रास्ता और सबसे छोटा रास्ता कुछ निरंतर भिन्न होता है , इस समस्या को समाप्त करने के लिए संकेतन का उपयोग करके ।cΘ
आपको पाठ्यपुस्तक में दी गई प्रक्रिया को फिर से लागू करने की आवश्यकता नहीं है, लेकिन आपको इसे थोड़ा बदलना होगा, उदाहरण के लिए दिए गए और का उपयोग करके सभी बच्चों को तालिका में असाइन करना। कार्य करता है।AUXd-ary-parentd-ary-child
चूँकि को परिवर्तित नहीं किया गया था, इसलिए यह चलने के समय पर निर्भर करता है । अपने विश्लेषण में आप अब आप hight और बच्चों की संख्या के लिए बुरी से बुरी हालत समय आनुपातिक का उपयोग करना चाहिए जो प्रत्येक नोड विचार करना चाहिए (जो ज्यादा से ज्यादा है घ )। एक बार फिर आपका विश्लेषण बहुत सटीक है, अंत में आपको , जिसे निम्न में रूपांतरित किया जा सकता है:EXTRACT-MAXMAX-HEAPIFYO(d logd(n(d−1)))
O(d logd(n(d−1)))=O(d(logd(n)+log(d−1)))=O(d logd(n)+d logd(d−1))
व्यावहारिक कारणों से हम हमेशा मान सकते हैं कि , इसलिए हम O संकेतन के भाग को खो सकते हैं , फिर हमें । जो मान्य समाधान भी है। लेकिन आश्चर्य नहीं कि आप मास्टर प्रमेय का उपयोग करके फ़ंक्शन रन टाइम का विश्लेषण भी कर सकते हैं , जो यह दिखाएगा कि केवल नहीं है, बल्कि भी है ।d≪ndlogd(d−1)O(dlogd(n))MAX-HEAPIFYOΘ
CLRS पुस्तक पहले से ही INSERT प्रक्रिया प्रदान करती है। जो इस तरह दिखता है:
INSERT(A,key) A.heap_size=A.heap_size+1 A[A.heap_size]=−∞ INCREASE-KEY(A,A.heap_size,key)
यह आसान सिद्ध हो सकता है लेकिन सामान्य ज्ञान यह है कि यह समय की जटिलता है । यह इसलिए है क्योंकि ढेर जड़ के लिए सभी तरह से लगाया जा सकता है।O(logd(n))
INSERT की तरह, INCREASE-KEY को भी पाठ्यपुस्तक में इस प्रकार परिभाषित किया गया है:
INCREASE-KEY(A,i,key) if key<A[i] error"new key is smaller then current" A[i]=key while i>1 and A[i]>A[d-ary-parent(i)] A[i]↔A[d-ary-parent(i)] i=d-ary-parent(i)
जटिलता स्पष्ट रूप से (पिछले बिंदु को देखें)।O(logd(n))
h = (log [nd−1+1])− 1
इस प्रकार हम ऊंचाई के लिए स्पष्टीकरण से ऊपर नहीं हैं। h = log [nd + 1 + 1] =1 = log [nd] -1 = log [n] हालांकि, फिर भी, पेड़ की ऊंचाईΘ(log(n)).
नोट के रूप में लिखी जाती है : लॉग हमेशा d-ary ढेर के लिए आधार d पर होता है ।