2009-11-17 35 views
17

在heapq庫創建的python堆中偷看的官方方式是什麼?現在我有在python中偷看堆

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

這是可以說,不是很好。我能否始終認爲heap[0]是堆的頂部並使用它?或者會假設太多的底層實現?

+2

你的意思是「偷看」? – chazomaticus

回答

27

是的,你可以做這樣的假設,因爲它是在documentation說:

堆是數組爲其heap[k] <= heap[2*k+1]heap[k] <= heap[2*k+2]所有ķ,從零開始計數 元素。爲了比較 ,不存在的元素被認爲是無限的 。 堆的有趣屬性是 heap[0]始終是其最小的 元素。

(而這有可能是沒有peek功能的原因:沒有必要爲它)

+0

我找不到這些信息的原因可能是我拼寫錯誤。大! – Thomas

+4

儘管拼寫正確可能會幫助你,但我仍然好奇地觀察到這個詞在文檔中不會出現。 – Stephan202

5

如果你正在使用Python 2.4或更新版本,你也可以使用heapq.nsmallest() 。

+1

但它至少是O(n).... –

+1

在這種情況下是「n」1嗎? – javadba