2015-05-25 6 views
5
h = [] 
heapq.heappush(h,(10, 1200)) 
heapq.heappush(h,(20, 31)) 
heapq.heappush(h,(5, 1)) 

मैं का एक निश्चित ढेर आकार बनाए रखना चाहते हैं बनाए रखने का कहना है कि 3, इसलिए जब मैं अगले heapq.heappush(h,(3,15)) है, मूल्य 20 के साथ कुंजी हट जाता है और मैं मान 3,5 और 10 के साथ छोड़ दिया है। कोई विचार कैसे?एक निश्चित आकार ढेर -python

+1

क्या यह अधिकतम ढेर या एक न्यूनतम ढेर होना चाहिए? यदि यह एक न्यूनतम ढेर है, तो आपको समस्याएं आ रही हैं, क्योंकि इसके लिए आपको एक हटाने-अधिकतम ऑपरेशन की आवश्यकता है। – user2357112

+0

मुझे अधिकतम ढेर चाहिए। फिर यदि कोई पूर्वनिर्धारित निकालें न्यूनतम कार्य है तो आप करते हैं। – user2991421

+0

निकालें-मिनट 'heapq.heappop' है। – user2357112

उत्तर

5

नहीं है कोई अंतर्निहित heapq में आकार की जांच करने के लिए, ताकि आप अपने आप कि करना होगा:

if len(h) < capacity: 
    heapq.heappush(h, thing) 
else: 
    # Equivalent to a push, then a pop, but faster 
    spilled_value = heapq.heappushpop(h, thing) 
    do_whatever_with(spilled_value) 

इसके अलावा, ध्यान दें कि heapq एक मिनट ढेर, नहीं एक अधिकतम ढेर लागू करता है। आपको अपनी प्राथमिकताओं के आदेश को शायद उन्हें अस्वीकार कर देना होगा।

+0

हैप्शशपॉप में पॉप ऑपरेशन सबसे छोटी वस्तु देता है लेकिन मुझे न्यूनतम ढेर पर विचार करते समय अधिकतम आइटम पॉप करना होगा। – user2991421

+0

@ user2991421: क्या आपको निकालें-मिनट और निकालें-अधिकतम दोनों की आवश्यकता है? यदि आपको दोनों की जरूरत है, तो ढेर नौकरी के लिए उपकरण नहीं है। यदि आपको केवल हटाने-अधिकतम की आवश्यकता है, तो प्राथमिकताओं को उलटाने से प्रभावी रूप से आपको अधिकतम ढेर मिल जाएगा। – user2357112

+0

मुझे जो चाहिए वह एक न्यूनतम ढेर या अधिकतम ढेर को न्यूनतम ढेर से अधिकतम तत्व को हटा दें या अधिकतम ढेर से न्यूनतम तत्व को हटा दें ताकि जब मैं एक नया तत्व जोड़ूं तो मेरे पास निश्चित आकार ढेर होगा। – user2991421

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