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

voglio mantenere una dimensione heap fissa di dire 3, così quando ho prossima ho heapq.heappush(h,(3,15)), chiave con il valore 20 viene eliminato e non mi resta con i valori 3,5 e 10. Qualche idea come?Mantenere un mucchio dimensione fissa -python

+1

Si suppone che questo sia un heap massimo o un heap minimo? Se si tratta di un heap minimo, avrai problemi, dal momento che hai bisogno di un'operazione remove-max per questo. – user2357112

+0

Voglio un heap massimo. Allora fai se c'è una funzione minima di rimozione predefinita. – user2991421

+0

remove-min è 'heapq.heappop'. – user2357112

risposta

5

Non c'è built-in in heapq per verificare le dimensioni, quindi dovrete farlo da soli:

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) 

Si noti inoltre che heapq implementa un min heap, non un mucchio max. Dovrai invertire l'ordine delle tue priorità, probabilmente negandole.

+0

L'operazione pop in heappushpop restituisce l'elemento più piccolo ma ho bisogno di fare il pop massimo quando consideri l'heap minimo. – user2991421

+0

@ user2991421: Avete bisogno sia di remove-min che di remove-max? Se hai bisogno di entrambi, un heap non è lo strumento per il lavoro. Se hai solo bisogno di rimuovere-max, l'inversione delle priorità ti darà un ammasso massimo. – user2357112

+0

Quello che mi serve è dato da un heap minimo o da un heap massimo rimuovi l'elemento max dall'heap minimo o rimuovi l'elemento minimo dall'heap massimo in modo che quando aggiungo un nuovo elemento io abbia un heap di dimensioni fisso. – user2991421

Problemi correlati