2009-11-17 39 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