एक ढेर और एक प्राथमिकता कतार के बीच अंतर


36

मैंने हमेशा सोचा था कि ढेर और प्राथमिकता कतार समानार्थी थे - एक सार डेटा संरचना जो समर्थन करती है insert, findMinऔर deleteMinसंचालन।

कुछ साहित्य मेरे साथ सहमत लगते हैं - उदाहरण के लिए क्रिस ओकासाकी की विशुद्ध रूप से कार्यात्मक डेटा संरचनाएं (अध्याय 3)।

दूसरी ओर, विकिपीडिया का हीप पृष्ठ इसे वृक्ष-आधारित डेटा संरचना के रूप में परिभाषित करता है, और बताता है कि ढेर प्राथमिकता वाले कतारों का एक ठोस कार्यान्वयन है।

मैं इस तथ्य के साथ एक कठिन सामंजस्य स्थापित कर रहा हूं कि मैं एक से अधिक ढेर कार्यान्वयन के बारे में सोच सकता हूं - वामपंथी ढेर, द्विपद ढेर, स्प्ले हीप ...

क्या साधारण तथ्य यह है कि अलग-अलग डेटा संरचनाओं के साथ ढेर को लागू किया जा सकता है, जिसका अर्थ यह नहीं है कि परिभाषा के अनुसार, यह एक सार डेटा संरचना है? और अगर ऐसा है, तो क्या प्राथमिकता कतारों के साथ वास्तविक अंतर है?


11
विकिपीडिया पृष्ठ को प्राथमिकता वाली कतारों ( en.wikipedia.org/wiki/Priority_queue ) पर पढ़ें , यह कहता है कि "प्राथमिकता कतार ढेर या अन्य विधियों जैसे कि अनियंत्रित सरणी" के साथ लागू की जा सकती है - और वास्तव में इसका उत्तर है आपका प्रश्न।
Doc Brown

2
खैर, वास्तव में नहीं - यह मुझे यह समझने में मदद नहीं करता है कि क्या एक ढेर एक ठोस डेटा संरचना है या एक सार है। मैं एक सार कहना चाहूंगा, क्योंकि ढेर के कई ठोस कार्यान्वयन हैं। यदि यह मामला है, और एक प्राथमिकता सूची और एक हीप दोनों समान गुणों के साथ सार डेटा संरचनाएं हैं, तो मुझे अंतर को समझने में सहायता की आवश्यकता है, और यह कहना कि एक दूसरे का संभावित कार्यान्वयन बहुत उपयोगी नहीं है यदि वास्तव में कोई नहीं है ठोस कार्यान्वयन।
निकोलस रिनाउडो

हालात और भी बदतर हैं: एक बाइनरी हीप को एक सरणी के रूप में या एक बाइनरी ट्री के रूप में लागू किया जा सकता है। सौभाग्य से, मैंने अभी तक एक सरणी को कुछ और के रूप में लागू नहीं सुना है।
अलेक्सी

जवाबों:


25

प्राथमिकता कतार में किसी भी कार्यान्वयन हो सकता है, एक सरणी की तरह जिसे आप पॉप करते समय रैखिक रूप से खोजते हैं। इसका मतलब यह है कि जब आप पॉप करते हैं तो आपको न्यूनतम या अधिकतम के आधार पर मूल्य मिलता है।

एक क्लासिक हीप, जैसा कि आमतौर पर कहा जाता है, आमतौर पर एक मिन हीप होता है। एक कार्यान्वयन जिसमें अच्छा समय जटिलता ( O(log n)पुश और पॉप पर) और कोई मेमोरी ओवरहेड नहीं है।


4
आप कहते हैं कि करने के लिए अंतर यह है कि वे एक ही आपरेशन (साझा करते हुए यह है कि क्या मतलब है findMin, deleteMin, insertउनके लिए), ढेर की गारंटी है "अच्छा" जटिलताओं प्राथमिकता कतारों नहीं है कहाँ?
निकोलस रिनाउडो

अलग-अलग समय की जटिलताओं (उदाहरण के लिए एक सामान्य रूप से जुड़ा हुआ बाइनरी ट्री) के साथ अलग-अलग कार्यान्वयन नहीं हो सकता है? इसके अलावा, समय जटिलता उस मेमोरी पर निर्भर करती है जिसका उपयोग किया जाता है। यदि यह एक चुंबकीय टेप है, तो O(log(n))पुश और पॉप के लिए नहीं होगा , मुझे लगता है।
एलेक्सी

6

यह वेबसाइट वास्तव में स्पष्ट व्याख्या प्रदान करती है। http://pages.cs.wisc.edu/~vernon/cs367/notes/11.PRIORITY-Q.html

संक्षेप में, कई डेटा संरचनाओं का उपयोग करके एक प्राथमिकता कतार को लागू किया जा सकता है जो हमने पहले से ही अध्ययन किया है (एक सरणी, एक लिंक की गई सूची, या एक बाइनरी सर्च ट्री)। हालांकि, वे डेटा संरचनाएं सबसे कुशल संचालन प्रदान नहीं करती हैं। सभी ऑपरेशनों को बहुत कुशल बनाने के लिए, हम ढेर नामक एक नई डेटा संरचना का उपयोग करेंगे।


1
ध्यान दें कि आपके द्वारा लिंक किए गए पृष्ठ के सारांश में, प्राथमिकता कतार को ही डेटा संरचना कहा जाता है ।
एलेक्सी

2

मुझे लगता है कि आपने कंक्रीट बनाम अमूर्त के बारे में जो लिखा है वह सही है। जहाँ आप कहते हैं कि स्प्ले हीप्स, बिनोमियल हीप्स हीप्स के विभिन्न कार्यान्वयन हैं, हालांकि, मुझे लगता है कि यह कहना सही है कि वे विभिन्न प्रकार के ढेर हैं। हीप मैं कार्यान्वयन की एक श्रेणी के रूप में सोचता हूं जो आम तौर पर न केवल एक ही इंटरफ़ेस की गारंटी देता है, बल्कि एक ही समय का उपयोग भी करता है।

आप इसे साहचर्य मानचित्र और हैश टेबल और बाइनरी सर्च ट्री के साथ भी देखते हैं। Bsts और हैश टेबल दोनों ठोस डेटा संरचनाएं हैं जो साहचर्य मानचित्र सार इंटरफ़ेस प्रदान करती हैं। लाल काले पेड़ और एवले के पेड़ दोनों ही संतुलित बीस्ट हैं, जिनमें एक ही बड़ा O गारंटी और एक ही अतिरिक्त इंटरफ़ेस (ऑर्डर ट्रैवर्सल में) है। वे विभिन्न प्रकार के पेड़ हैं मैं पेड़ों के विभिन्न कार्यान्वयन से अधिक कहूंगा। वे अलग-अलग लेकिन साहचर्य मानचित्रों के निकट से संबंधित कार्यान्वयन हैं।

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