在 python 中查看堆

发布于 2024-08-11 06:54:00 字数 235 浏览 16 评论 0原文

查看 heapq 库创建的 python 堆的官方方法是什么?现在我拥有的

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

可以说不是很好。我是否可以始终假设 heap[0] 是堆的顶部并使用它?或者这会假设太多的底层实现吗?

What is the official way of peeking in a python heap as created by the heapq libs? Right now I have

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

which is arguably, not very nice. Can I always assume that heap[0] is the top of the heap and use that? Or would that assume too much of the underlying implementation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不寐倦长更 2024-08-18 06:54:00

是的,您可以做出这个假设,因为它在文档中进行了说明:

堆是 heap[k] <= heap[2*k+1]heap[k] <= 的数组
所有 k 的堆[2*k+2]
,正在计数
元素从零开始。为了
比较,不存在的元素是
被认为是无限的。
堆的有趣属性是
heap[0] 始终是最小的
元素。

(这可能就是没有 peek 功能的原因:没有必要。)

Yes, you can make this assumption, because it is stated in the documentation:

Heaps are arrays for which heap[k] <= heap[2*k+1] and heap[k] <=
heap[2*k+2]
for all k, counting
elements from zero. For the sake of
comparison, non-existing elements are
considered to be infinite. The
interesting property of a heap is that
heap[0] is always its smallest
element.

(And that's probably the reason there is no peek function: there is no need for it.)

泛泛之交 2024-08-18 06:54:00

如果您使用的是 Python 2.4 或更高版本,您还可以使用 heapq.nsmallest()。

If you're using Python 2.4 or newer, you can also use heapq.nsmallest().

糖果控 2024-08-18 06:54:00

heapq.heappop(堆)
弹出并返回堆中最小的项目,保持堆不变。如果堆为空,则会引发 IndexError。要访问最小的项目而不弹出它,请使用 heap[0]。

Python3 文档明确指出可以使用 heap[0] 来查看最小的元素不弹出。

注意:如果您想保持最大堆,可以使用负数。

heapq.heappop(heap)
Pop and return the smallest item from the heap, maintaining the heap invariant. If the heap is empty, IndexError is raised. To access the smallest item without popping it, use heap[0].

Python3 documentation clearly states that you can use heap[0] to peek the smallest element without popping.

Note: You can use negative notation if you want to maintain the max heap.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文