2009-11-17 11 views
17

Qual è il modo ufficiale di sbirciare in un heap python come creato dalle librerie heapq? In questo momento hoSbirciare in un mucchio in python

def heappeak(heap): 
    smallest = heappop(heap) 
    heappush(heap, smallest) 
    return smallest 

che è discutibilmente, non molto bello. Posso sempre presumere che lo heap[0] sia la cima dell'heap e usarlo? O questo presuppone troppa implementazione sottostante?

+2

Vuoi dire "sbirciare"? – chazomaticus

risposta

27

Sì, si può fare questa ipotesi, perché si afferma nella documentation:

Cumuli sono array per cui heap[k] <= heap[2*k+1] e heap[k] <= heap[2*k+2] per tutti k, contando elementi da zero. Per il confronto , gli elementi non esistenti sono considerati infiniti. La proprietà interessante di un heap è che heap[0] è sempre il suo più piccolo elemento .

(E questo è probabilmente la ragione non esiste una funzione peek:. Non v'è alcun bisogno di esso)

+0

Il motivo per cui non sono riuscito a trovare questa informazione era probabilmente l'errore di ortografia. Grande! – Thomas

+4

Anche se ortografarlo correttamente * probabilmente * ti ha aiutato, osservo che curiosamente quella parola non si presenta comunque nella documentazione. – Stephan202

5

Se stai usando Python 2.4 o più recente, è possibile utilizzare anche heapq.nsmallest() .

+1

Ma è almeno O (n) .... –

+1

"n" 1 in questo caso? – javadba

Problemi correlati