2011-03-08 18 views
7

मैं ढेर से जुड़े कुछ होमवर्क पर काम कर रहा हूं, और मैं समझता हूं कि उन्हें कैसे संरचित किया जाता है। एक ढेर, प्रत्येक नोड ढेर संपत्ति संतोषजनक होना आवश्यक हैहीप डेटा संरचना का उपयोग क्या है?

अधिकतम-ढेर संपत्ति है कि प्रत्येक नोड के लिए मैं अन्य तो जड़, ढेर [जनक (i)]> = ढेर [i]

तो प्रत्येक नोड पर, उच्च नोड्स में उच्च संख्या होती है, निचले नोड्स की संख्या कम होती है। मुझे यह समझ आ गया। लेकिन मैं एक सूची में उच्चतम एन संख्या प्राप्त करने के लिए फिर एक हीप का उपयोग नहीं देख सकता। मुझे किसी विशेष मूल्य की खोज करने और नोड को वापस करने का आसान तरीका नहीं दिखाई देता है, या n निम्नतम संख्या (अधिकतम-ढेर में) की खोज करने के लिए। दोनों एक बाइनरी खोज पेड़ में अपेक्षाकृत आसान हैं।

आप एक साधारण बाइनरी खोज पेड़ का उपयोग क्यों नहीं करेंगे? या बेहतर अभी तक, एक संतुलित बाइनरी खोज पेड़?

संपादित करें: मुझे ध्यान रखना चाहिए कि यह होमवर्क समस्या का उत्तर नहीं ढूंढ रहा है। वास्तविक होमवर्क समस्या डालने के लिए समानांतर-पी-ढेर के लिए छद्म कोड लिख रही थी() और निकालें मैक्स() फ़ंक्शंस। और मैंने पहले ही उन्हें उत्तर दिया है। उन्होंने मुझे अभी महसूस किया कि मैं वास्तव में ढेर को समझ नहीं पा रहा हूं।

+0

के संभावित डुप्लिकेट (http: // stackoverflow।कॉम/प्रश्न/74 9 1 9//--------use-a-heap) –

+0

@Jeremiah, मैंने SO पर उत्तर की खोज की लेकिन उसे याद किया। और हाँ, ऐसा लगता है कि मैं एक डुप्ली हूं। क्या मुझे अपना प्रश्न बंद करना चाहिए? –

+0

कोई ज़रूरत नहीं है। यह हमारे द्वारा बंद होने वाला है, लेकिन डुप्लिकेट को आम तौर पर अच्छी चीजों के रूप में माना जाता है, क्योंकि एक ही प्रश्न पूछने के एक से अधिक तरीके हैं। –

उत्तर

4

पॉइंटर्स की कमी (ढेर आम तौर पर एक सरणी आधारित डेटा संरचना का उपयोग करते हैं) के कारण, ऑपरेशन बाइनरी पेड़ के मुकाबले तेजी से होते हैं। इसके अलावा, कुछ और जटिल ढेर (जैसे द्विपक्षीय) कुशलता से विलय किया जा सकता है, जो बाइनरी पेड़ के लिए करना आसान नहीं है। this SO question पर भी जानकारी उपलब्ध है।

11

ढेर डेटा संरचना में कई अनुप्रयोग हैं।

  • Heapsort: सबसे अच्छा छँटाई तरीकों में जगह और कोई द्विघात बदतर मामले के परिदृश्यों के साथ किया जा रहा है में से एक।
  • चयन एल्गोरिदम: न्यूनतम, अधिकतम, न्यूनतम और अधिकतम, औसत, या यहां तक ​​कि के-वें सबसे बड़ा तत्व ढूंढना रैखिक समय (अक्सर स्थिर समय) में ढेर का उपयोग करके किया जा सकता है। [4]
  • ग्राफ एल्गोरिदम: आंतरिक ट्रैवर्सल डेटा संरचनाओं के रूप में ढेर का उपयोग करके, रन टाइम बहुपद आदेश से कम हो जाएगा। ऐसी समस्याओं के उदाहरण प्राइम के न्यूनतम स्पैनिंग पेड़ एल्गोरिदम और डिजस्ट्रा की सबसे छोटी पथ समस्या हैं।

पूर्ण और लगभग पूर्ण बाइनरी ढेर अकेले सरणी का उपयोग करके एक बहुत ही अंतरिक्ष-कुशल तरीके से प्रदर्शित किया जा सकता है। पहले (या अंतिम) तत्व में रूट होगा। सरणी के अगले दो तत्वों में इसके बच्चे होते हैं। अगले चार में दो बच्चे नोड्स के चार बच्चे शामिल हैं। इस प्रकार स्थिति एन पर नोड के बच्चे एक-आधारित सरणी में 2 एन और 2 एन + 1 पर स्थित होंगे, या 2 एन + 1 और 2 एन + 2 में शून्य-आधारित सरणी। यह सरल इंडेक्स कंप्यूटेशंस करके पेड़ को ऊपर या नीचे ले जाने की अनुमति देता है। एक ढेर को संतुलित करना तत्वों को स्वैप करके किया जाता है जो क्रम से बाहर होते हैं। चूंकि हम अतिरिक्त मेमोरी (नोड्स के लिए, उदाहरण के लिए) की आवश्यकता के बिना सरणी से एक ढेर बना सकते हैं, हेपॉर्ट का उपयोग किसी सरणी को क्रमबद्ध करने के लिए किया जा सकता है।

कुछ अनुप्रयोगों में पेड़ों पर ढेर का एक और फायदा यह है कि ढेर का निर्माण तारजन के एल्गोरिदम का उपयोग करके रैखिक समय में किया जा सकता है।

संदर्भ: [? जब मैं एक ढेर का उपयोग करना चाहते हैं] http://en.wikipedia.org/wiki/Heap_%28data_structure%29

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