Spähen in einem Haufen in Python
Frage
Was ist der offizielle Weg in einem Python Haufen spähen, wie durch die heapq Libs erstellt? Im Moment habe ich
def heappeak(heap):
smallest = heappop(heap)
heappush(heap, smallest)
return smallest
das wohl ist, nicht sehr schön. Kann ich davon ausgehen, dass immer heap[0]
die Spitze des Haufens ist und Verwendung das? Oder würde die davon ausgehen, zu viel von der zugrunde liegenden Implementierung?
Lösung
Ja, man kann diese Annahme machen, weil es in der Dokumentation angegeben :
Heaps sind Arrays, für die
heap[k] <= heap[2*k+1]
undheap[k] <= heap[2*k+2]
für alle k , Zählen Elemente von Null. Um ... Willen Vergleich, nicht vorhandene Elemente sind als unendlich sein. Die interessante Eigenschaft eines Haufens ist, dassheap[0]
ist immer sein kleinstes Element.
(und das ist wahrscheinlich der Grund, warum gibt es keine peek
Funktion. Gibt es keine Notwendigkeit für sie)
Andere Tipps
Wenn Sie mit Python 2.4 oder neuer können Sie auch heapq.nsmallest () verwenden.