प्राथमिकता कतार के स्पष्ट उत्तर के अलावा, मेरे प्रोग्रामिंग कारनामों में एक ढेर कब उपयोगी होगा?
जवाबों:
जब भी आपको सबसे बड़ी (या सबसे छोटी) वस्तु तक त्वरित पहुँच की आवश्यकता हो, इसका उपयोग करें, क्योंकि वह वस्तु हमेशा सरणी में या पेड़ की जड़ में पहला तत्व होगी।
हालाँकि, शेष सरणी को आंशिक रूप से अनसोल्ड रखा गया है। इस प्रकार, तत्काल पहुंच केवल सबसे बड़ी (सबसे छोटी) मद तक ही संभव है। आवेषण तेज़ हैं, इसलिए यह आने वाली घटनाओं या डेटा से निपटने का एक अच्छा तरीका है और हमेशा सबसे पहले / सबसे बड़ी पहुंच है।
प्राथमिकता कतार, अनुसूचियों (जहां जल्द से जल्द आइटम वांछित है), आदि के लिए उपयोगी ...
एक ढेर एक पेड़ है जहां एक मूल नोड का मूल्य उसके किसी भी वंशज नोड्स से बड़ा है।
यदि आप गहराई से रैखिक क्रम में संग्रहीत बाइनरी ट्री के रूप में एक ढेर के बारे में सोचते हैं, पहले रूट नोड के साथ (फिर उस नोड के बच्चे अगले, फिर उन नोड्स के बच्चे); तब सूचकांक N पर एक नोड के बच्चे 2N + 1 और 2N + 2 पर होते हैं। यह संपत्ति त्वरित पहुंच-दर-सूचकांक की अनुमति देती है। और जब से नोड्स को स्वैप करके हीप को हेरफेर किया जाता है, यह इन-प्लेस छँटाई के लिए अनुमति देता है।
हीप्स संरचनाएं हैं जो न्यूनतम या अधिकतम तक त्वरित पहुंच की अनुमति देती हैं ।
लेकिन आप ऐसा क्यों चाहेंगे? आप यह देखने के लिए ऐड पर हर प्रविष्टि की जांच कर सकते हैं कि यह सबसे छोटा है या सबसे बड़ा। इस तरह से आपके पास हमेशा सबसे छोटा या निरंतर समय में सबसे बड़ा होता है O(1)।
इसका उत्तर यह है कि ढेर आपको सबसे छोटा या सबसे बड़ा खींचने की अनुमति देता है और जल्दी से अगला सबसे छोटा या सबसे बड़ा पता है । इसलिए इसे प्राथमिकता कतार कहा जाता है।
मान लीजिए आपके पास एक अस्पताल है जिसमें रोगियों को उनकी उम्र के आधार पर भाग लिया जाता है। सबसे पुराने हमेशा पहले से ही उपस्थित होते हैं, कोई फर्क नहीं पड़ता जब वह कतार में मिलता है।
आप केवल सबसे पुराने का ट्रैक नहीं रख सकते क्योंकि यदि आप उसे बाहर निकालते हैं, तो आप अगले सबसे पुराने को नहीं जानते हैं। इस अस्पताल की समस्या को हल करने के लिए, आप एक अधिकतम ढेर को लागू करते हैं । यह ढेर, आंशिक रूप से आदेश दिया गया है। इसका मतलब है कि आप रोगियों को उनकी उम्र के अनुसार नहीं बना सकते हैं, लेकिन आप जानते हैं कि सबसे पुराने हमेशा ऊपर में होते हैं, इसलिए आप लगातार समय में एक मरीज को बाहर निकाल सकते हैं O(1)और लॉग समय में हीप को फिर से संतुलित कर सकते हैं O(log N)।
मान लीजिए कि आपके पास पूर्णांकों का अनुक्रम है और आप इसका ट्रैक रखना चाहते हैं median। माध्यिका वह संख्या है जो एक क्रमबद्ध सरणी के बीच में होती है।
उदाहरण:
[1, 2, 5, 7, 23, 27, 31]
उपरोक्त मामले में, 7माध्यिका है क्योंकि छोटी संख्याओं वाली सारणी [1, 2, 5]बड़ी संख्याओं वाले एक ही आकार की होती है [23, 27, 31]। आम तौर पर, यदि सरणी में तत्वों की एक विषम संख्या है, तो मध्य में 2 तत्वों का औसत अंकगणितीय औसत है, उदाहरण के लिए (5 + 7)/2।
अब, आप माध्यिका का ट्रैक कैसे रखते हैं? 2 ढेर होने से , एक मिनट का ढेर वर्तमान मंझले की तुलना में छोटा होता है और एक अधिकतम ढेर जिसमें वर्तमान मंझला की तुलना में बड़ी संख्या होती है। अब, अगर ये ढेर हमेशा संतुलित रहते हैं, तो 2 ढेर में समान तत्व होंगे या एक में 1 तत्व होगा जो दूसरे की तुलना में अधिक है, सबसे।
जब आप अनुक्रम में एक नया तत्व जोड़ते हैं, यदि संख्या वर्तमान माध्यिका से छोटी है, तो आप इसे न्यूनतम हीप में जोड़ते हैं, अन्यथा, आप इसे अधिकतम हीप में जोड़ते हैं। अब, यदि ढेर असंतुलित होते हैं (एक हीप में 1 से अधिक तत्व होता है), तो आप एक तत्व को सबसे बड़े ढेर से खींचते हैं और सबसे छोटे में जोड़ते हैं । अब वे संतुलित हैं।
एक ढेर की विशेषता यह है कि यह एक संरचना है जो डेटा को बनाए रखता है; इस प्रकार, यह एक पूर्ण आदेश को बनाए रखने की लागत और यादृच्छिक अराजकता के माध्यम से खोज की लागत के बीच एक अच्छा व्यापार है। उस विशेषता का उपयोग कई एल्गोरिदम पर किया जाता है, जैसे चयन, आदेश, या वर्गीकरण।
एक ढेर की एक और उपयोगी विशेषता यह है कि इसे एक सरणी से इन-प्लेस बनाया जा सकता है!