47

heapq libsによって作成されたPythonヒープを覗く公式の方法は何ですか?今私は持っています

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

これは間違いなく、あまり良くありません。heap[0]それがヒープの一番上であると常に想定して使用できますか?それとも、基礎となる実装が多すぎると想定しますか?

4

2 に答える 2

66

はい、ドキュメントに記載されているため、この仮定を行うことができます。

ヒープはheap[k] <= heap[2*k+1]heap[k] <= heap[2*k+2]すべてのkについて、ゼロから要素を数える配列です。比較のために、存在しない要素は無限であると見なされます。ヒープの興味深い特性は、それ heap[0]が常に最小の要素であるということです。

(そしてそれがおそらく機能がない理由ですpeek:それの必要はありません。)

于 2009-11-17T19:00:17.177 に答える
9

Python 2.4以降を使用している場合は、heapq.nsmallest()を使用することもできます。

于 2011-05-03T14:07:12.113 に答える