Questo modulo fornisce un'implementazione dell'algoritmo heap queue, conosciuto anche come algoritmo di coda con priorit�.
Gli Heap sono vettori tali che
heap[k] <= heap[2*k+1] e
heap[k] <= heap[2*k+2] per ogni
k, contando gli elementi da zero. Per esigenze di confronto,
gli elementi non presenti vengono considerati infiniti, quindi maggiori di qualunque
altro. L'interessante propriet� dello heap � che heap[0]
� sempre l'elemento pi� piccolo.
L'API seguente differisce dagli algoritmi di heap dei manuali informatici per due aspetti: (a) Noi usiamo indici che iniziano da zero. Questo rende le relazioni tra l'indice di un nodo e gli indici dei suoi figli leggermente meno ovvie, ma � pi� conveniente poich� anche Python usa indicizza da zero. (b) Il nostro metodo pop restituisce l'elemento pi� piccolo, non il pi� grande (chiamato il "min heap" nei manuali; un "max heap" � pi� comune nei testi grazie alla sua adattabilit� all'ordinamento sul posto).
Questi due punti permettono di trattare l'heap come una normale
lista Python senza sorprese: heap[0] � l'elemento pi�
piccolo e heap.sort() mantiene l'heap invariato!
Per creare uno heap, potete utilizzare una lista inizializzata a [] o
trasformare una lista non vuota in uno heap tramite la funzione
heapify().
Vengono fornite le seguenti funzioni :
| heap, item) |
| heap) |
| x) |
| heap, item) |
Esempio di utilizzo:
>>> from heapq import heappush, heappop >>> heap = [] >>> data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0] >>> for item in data: ... heappush(heap, item) ... >>> sorted = [] >>> while heap: ... sorted.append(heappop(heap)) ... >>> print sorted [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> data.sort() >>> print data == sorted True >>>