L'heapq predefinito è l'implementazione della coda minima e si chiede se è disponibile un'opzione per la coda massima? Grazie.API max heap integrata in Python
Ho provato la soluzione utilizzando _heapify_max per l'heap massimo, ma come gestire l'elemento push/pop dinamico? Sembra che _heapify_max possa essere utilizzato solo durante il periodo di inizializzazione.
Modifica, provato _heapify_max sembra non funzionare per gli elementi push/pop dinamici. Ho provato entrambi i metodi in uscita allo stesso modo, entrambi i risultati sono, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
def heapsort(iterable):
h = []
for value in iterable:
heapq.heappush(h, value)
return [heapq.heappop(h) for i in range(len(h))]
def heapsort2(iterable):
h = []
heapq._heapify_max(h)
for value in iterable:
heapq.heappush(h, value)
return [heapq.heappop(h) for i in range(len(h))]
if __name__ == "__main__":
print heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print heapsort2([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
Grazie in anticipo, Lin
Possibile duplicato di [Che cosa utilizzo per un implementazione max-heap in Python?] (http://stackoverflow.com/questions/2501457/what-do-i-use-for-a-max-heap-implementation-in-python) –
@LukasGraf, non lo sono certo se chiamare la funzione _heapify_max è buono, visto che vedo il prefisso "_", che sembra essere una funzione interna? –
@LukasGraf, la prima soluzione non mi va bene dato che devo gestire sia gli interi che le stringhe. :) –