Заглядывать в кучу в питоне - PullRequest
25 голосов
/ 17 ноября 2009

Каков официальный способ заглянуть в кучу питона, созданную библиотеками heapq? Прямо сейчас у меня есть

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

что, возможно, не очень приятно. Могу ли я всегда предполагать, что heap[0] является вершиной кучи, и использовать это? Или это предполагает слишком многое из базовой реализации?

Ответы [ 2 ]

34 голосов
/ 17 ноября 2009

Да, вы можете сделать это предположение, потому что оно указано в документации :

Кучи - это массивы, для которых heap[k] <= heap[2*k+1] и heap[k] <= heap[2*k+2] для всех k , считая элементы с нуля. Во имя сравнение, несуществующие элементы считается бесконечным. The Интересное свойство кучи в том, что heap[0] всегда самый маленький элемент.

(И это, вероятно, причина того, что нет функции peek: в этом нет необходимости.)

5 голосов
/ 03 мая 2011

Если вы используете Python 2.4 или новее, вы также можете использовать heapq.nsmallest ().

...