Standard heapq ist min-Warteschlangenimplementierung und fragen, ob es eine Option für die maximale Warteschlange gibt? Vielen Dank.integrierte Max-Heap-API in Python
Ich versuchte die Lösung mit _heapify_max für Max Heap, aber wie mit dynamisch Push/Pop-Element umgehen? Es scheint, dass _heapify_max nur während der Initialisierungszeit verwendet werden kann.
import heapq
def heapsort(iterable):
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])
Bearbeiten, versuchte _heapify_max scheint nicht für dynamisch Push/Pop-Elemente zu arbeiten. Ich habe versucht beide Methoden gleich auszugeben, beide Ausgänge sind, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
> a = SortedList()
> a.add(3)
> a.add(2)
> a.add(1)
> a.pop()
3
Es ist kein Haufen, aber es ist schnell und funktioniert:
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])
Vielen Dank im Voraus, Lin
Mögliche Duplikate von [Was verwende ich für eine Max-Heap-Implementierung in Python?] (http://stackoverflow.com/questions/2501457/what-doi-i-use-for-a-max-heap-implementation-in-python) –
@LukasGraf, ich bin nicht Sicher, ob die Aufruffunktion _heapify_max gut ist, da ich das Präfix "_" sehe, was eine interne Funktion zu sein scheint? –
@LukasGraf, die erste Lösung passt mir nicht gut, da ich sowohl ganze Zahlen als auch Strings verarbeiten muss. :) –