2013-01-15 14 views
5

में हटाएं-अधिकतम ऑपरेशन मैं एक न्यूनतम-अधिकतम ढेर, एक प्रकार की डबल-एंडेड प्राथमिकता कतार लागू कर रहा हूं। न्यूनतम-अधिकतम ढेर के बारे में अधिक जानकारी के लिए आप यहां here देख सकते हैं।एक न्यूनतम-अधिकतम ढेर

सम्मिलन और हटाने-मिनट संचालन के लिए कोड सरल और नेट पर उपलब्ध हैं। लेकिन, मैं एक न्यूनतम अधिकतम ढेर पर हटाने-अधिकतम ऑपरेशन को लागू करने का भी प्रयास कर रहा हूं।

प्रारंभ में, मुझे लगा कि न्यूनतम-अधिकतम ढेर में डिलीट-मैक्स अधिकतम-न्यूनतम ढेर में डिलीट-मैक्स के समान होगा (यदि हम अधिकतम तत्व वाले न्यूनतम-अधिकतम ढेर के उप-भाग पर विचार करते हैं, तो यह अधिकतम- न्यूनतम ढेर)। तो, कार्यान्वयन मिनी-अधिकतम ढेर के मिनट को हटाने के लिए सरल और समान होगा।

लेकिन, वहाँ एक समस्या है: enter image description here

के रूप में, ऊपर चित्र में देखा जा सकता है, हालांकि 70 में है अधिकतम तत्व, पिछले तत्व (12) न्यूनतम-अधिकतम ढेर के है नहीं subtree 70 युक्त। तो, क्या मैं इसे 70 के हटाने के बाद बाएं subtree में बाएं अंतर को बदलने के लिए उपयोग कर सकते हैं?

हम उस तत्व का उपयोग नहीं करते और बदले में अधिकतम-न्यूनतम ढेर की नष्ट-अधिकतम प्रक्रिया का पालन करें और 20 का उपयोग खाई को बदलने के लिए, अगले तत्व ढेर में डाला 10 और हमेशा के लिए की सही बच्चे पर किया जाएगा 9

कोई सही बच्चा नहीं होगा, तो क्या कोई मेरी मदद कर सकता है?

+3

चूंकि एक यादृच्छिक कुंजी हटाने के बारे में सवाल एक हटाए गए अधिकतम के बाद ढेर को ठीक करने के तरीके से अलग है, इसलिए मैं इसे एक अलग प्रश्न के रूप में पूछने पर विचार करता हूं। – templatetypedef

+0

@templatetypedef इस प्रश्न को "अधिकतम तत्व को हटाने के तरीके" पर ध्यान केंद्रित करने के लिए संपादित किया गया। अब आप "न्यूनतम-अधिकतम ढेर से किसी नोड को कैसे निकालें" पर प्रस्तावित समाधान के साथ एक विशिष्ट प्रश्न प्राप्त कर सकते हैं: http://stackoverflow.com/q/39392864/3924118 – nbro

उत्तर

3

मेरा मानना ​​है कि अंतिम स्तर पर सही नोड को हटाने और इसे हटाए गए अधिकतम तत्व को बदलने के लिए इसका उपयोग करना सही है, भले ही यह पेड़ में पार हो जाए।

  1. पिछले स्तर में सबसे दायीं ओर नोड निकाल रहा है अपरिवर्तनशीलताओं कि पेड़ के भीतर किसी भी नोड्स के लिए आयोजित करने की जरूरत है कि के किसी भी परिवर्तन नहीं करता है: तर्क निम्नलिखित है मिनट स्तरों पर नोड्स के सभी अभी भी तुलना में छोटे होते उनके सभी वंशज, और अधिकतम स्तर पर सभी नोड्स अभी भी उनके वंशजों से अधिक हैं।

  2. पेड़ अभी भी एक पूर्ण बाइनरी पेड़ है।

बार जब आप इस नोड पर चले गए हैं, तो आप सामान्य Fixup प्रक्रिया एक अधिकतम मिनट ढेर में क्रम में उपयोग सुनिश्चित करना है कि बाईं सबट्री अपरिवर्तनशीलताओं अभी भी कर सकते हैं।

आशा है कि इससे मदद मिलती है!

+0

इस प्रकार मैंने इसे भी कार्यान्वित किया, जब मैंने कुछ महीने पहले एक न्यूनतम अधिकतम ढेर डेटा संरचना लिखा था। (+1) –

+0

यह न्यूनतम अधिकतम ढेर में _maximum_ तत्व को हटाने के लिए काम करता है, लेकिन क्या आप सुनिश्चित हैं कि यह न्यूनतम-अधिकतम ढेर में किसी भी नोड के लिए काम करता है? यदि हां, तो आप किस "फिक्सअप" का उपयोग करेंगे? "ट्रिकल-डाउन" ऑपरेशन का उपयोग करना काम नहीं करेगा, इस गिस्ट को दी गई एकमात्र टिप्पणी की जांच करें जो समस्या दिखाती है: https://gist.github.com/gnarmis/4647645 – nbro

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