2011-01-08 18 views
16

संभावित डुप्लिकेट:
Why are two different concepts both called “heap”?
What's the relationship between “a” heap and “the” heap?ढेर वास्तव में एक ढेर है?

नेट (और जावा के रूप में तक मुझे पता है), ऐसा क्षेत्र है जहां वस्तुओं गतिशील आवंटित किए जाते हैं प्रबंधित ढेर के रूप में जाना जाता है । हालांकि, अधिकांश documentation यह बताता है कि प्रबंधित ढेर कार्य कैसे एक रैखिक डेटा संरचना, जैसे एक लिंक्ड सूची या ढेर के रूप में दर्शाता है।

तो, प्रबंधित ढेर वास्तव में heap है, या यह किसी अन्य डेटा संरचना के साथ लागू किया गया है? यदि यह वास्तव में एक ढेर डेटा संरचना का उपयोग नहीं करता है, तो इस शब्द के अर्थ को अधिभारित करने के लिए शब्दावली की एक महत्वपूर्ण विफलता की तरह लगता है।

यदि यह वास्तव में एक ढेर डेटा संरचना है, तो मूल्य क्या है जो ढेर संपत्ति को संतुष्ट करता है: आवंटित स्मृति क्षेत्र का आकार?

+0

+1 मैंने पहले ही इस प्रश्न के बारे में सोचा है। –

+0

यह भी देखें कि http://stackoverflow.com/questions/1699057/why-are-two- अलग-concepts-both-called-heap –

उत्तर

14

नहीं, ढेर heap-ordered binomial tree बिल्कुल नहीं है। यह स्पष्ट नहीं है (मेरे लिए) जिनकी गलती शब्दावली संघर्ष है, लेकिन अब दशकों की ढेर की तारीखों का उपयोग अब दशकों से है (1 9 70 के मध्य में, ऐसा प्रतीत होता है)। this article में कुछ इतिहास पर चर्चा की गई है।

+1

संभावित रूप से शब्द ढेर पारंपरिक संरचना के रूप में डेटा संरचना से परे अपने स्वयं के अर्थ पर लिया गया है। मेरा मतलब है, हम इसे और क्या कहेंगे और हम इसे "ढेर" कहकर सिखाएंगे? द आर्ट ऑफ कंप्यूटर प्रोग्रामिंग से ऐतिहासिक संदर्भ के लिए –

+1

+1। –

+0

@ जॉन के: मैं मूल निवासी (अंग्रेजी का) नहीं हूं, इसलिए कंप्यूटिंग में दो अलग-अलग उपयोगों को छोड़कर, "ढेर" का मतलब मेरे लिए बहुत मायने नहीं रखता है। IIUC, पारंपरिक उपयोग "ढेर" का पर्याय बन गया है। –

0

मुझे यकीन है कि मेरा जवाब नहीं है, लेकिन जहां तक ​​मुझे सी # या जावा जैसी भाषाओं में पता है, जहां स्मृति को मेरे कचरा कलेक्टर में प्रबंधित किया जाता है, स्मृति क्षेत्र रैखिक नहीं है। जीसी स्मृति को मुक्त कर रहा है जो मुक्त हो सकता है और जब स्मृति कम हो जाती है तो यह किसी प्रकार की डीफ्रैग्मेंटेशन करने वाली स्मृति को संकलित करती है। यह स्मृति के ब्लॉक को चलाता है जो प्रोग्राम "अंत" में कुछ जगह बनाने के लिए उपयोग करता है। आपको इस उत्तर की आवश्यकता क्यों है? क्या आप कुछ निम्न स्तरीय मेमोरी प्रबंधन करना चाहते हैं?

1

इस अर्थ में, "ढेर" का अर्थ है: महत्वपूर्ण संसाधनों को स्टोर करने के लिए उपयोग किया जाने वाला एक विशेष स्मृति क्षेत्र। उस संदर्भ में यह "ढेर डेटा strucure" से संबंधित नहीं है।

1

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

यह स्पष्ट रूप से वास्तविक heap data structure, जो शब्द "ढेर" तथाकथित ढेर संपत्ति (विकिपीडिया से) का उल्लेख करने का उपयोग करता है से बहुत अलग है:

अगर बी का एक बच्चा नोड है ए, फिर कुंजी (ए) ≥ कुंजी (बी)।

तो हाँ, वे वास्तव में असंबद्ध हैं। एक सिर्फ एक वर्णनात्मक शब्द है जबकि दूसरे की एक और अधिक औपचारिक परिभाषा है।

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