2009-11-17 5 views
17

Quelle est la manière officielle de jeter un coup d'œil dans un tas de python créé par les bibliothèques heapq? En ce moment j'aiJetez un coup d'œil dans un tas en python

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

ce qui est discutable, pas très agréable. Puis-je toujours supposer que heap[0] est le sommet du tas et l'utiliser? Ou cela supposerait-il trop de la mise en œuvre sous-jacente?

+2

Voulez-vous dire "peek"? – chazomaticus

Répondre

27

Oui, vous pouvez faire cette supposition, car il est dit dans le documentation:

Heaps sont des tableaux pour lesquels heap[k] <= heap[2*k+1] et heap[k] <= heap[2*k+2] pour tous k, en comptant éléments de zéro. Pour la comparaison , les éléments inexistants sont considérés comme infinis. La propriété intéressante d'un tas est est que heap[0] est toujours son plus petit élément.

(Et c'est probablement la raison pour laquelle il n'y a pas de fonction peek:. Il n'y a pas besoin pour elle)

+0

La raison pour laquelle je n'ai pas pu trouver cette information était probablement que j'ai mal orthographié peek. Génial! – Thomas

+4

Bien que l'orthographe correcte vous aurait probablement aidé, je remarque que curieusement ce mot ne figure pas dans la documentation de toute façon. – Stephan202

5

Si vous utilisez Python 2.4 ou plus récent, vous pouvez également utiliser heapq.nsmallest() .

+1

Mais c'est au moins O (n) .... –

+1

Est-ce que "n" 1 dans ce cas? – javadba

Questions connexes