Заглядывание в кучу на python
Вопрос
Каков официальный способ заглянуть в кучу python, созданную библиотеками heapq?Прямо сейчас у меня есть
def heappeak(heap):
smallest = heappop(heap)
heappush(heap, smallest)
return smallest
что, возможно, не очень приятно.Могу ли я всегда предполагать, что heap[0]
является вершиной кучи и использует это?Или это предполагало бы слишком большую часть базовой реализации?
Решение
Да, вы можете сделать это предположение, потому что оно изложено в Документация:
Кучи - это массивы , для которых
heap[k] <= heap[2*k+1]
иheap[k] <= heap[2*k+2]
для всех k, считая элементы с нуля.Ради сравнения, несуществующие элементы считаются бесконечными. интересное свойство кучи заключается в том, чтоheap[0]
всегда является его наименьшим элементом.
(И это, вероятно, причина, по которой нет peek
функция:в этом нет никакой необходимости.)
Другие советы
Если вы используете Python 2.4 или новее, вы также можете использовать heapq.nsmallest().