Python——heapq堆队列算法

Python——heapq堆队列算法

特点

  • 使用了从零开始的索引。这使得节点和其孩子节点索引之间的关系不太直观但更加适合,因为 Python 使用从零开始的索引。
  • pop 方法返回最小的项而不是最大的项

创建一个堆

h e a p q . h e a p i f y ( x ) heapq.heapify(x) heapq.heapify(x)

将list x 转换成堆,原地,线性时间内。

加入和弹出

h e a p q . h e a p p u s h ( h e a p , i t e m ) heapq.heappush(heap, item) heapq.heappush(heap,item)

将 item 的值加入 heap 中,保持堆的不变性。

h e a p q . h e a p p o p ( h e a p , i t e m ) heapq.heappop(heap, item) heapq.heappop(heap,item)

弹出并返回 heap 的最小的元素,保持堆的不变性。如果堆为空,抛出 IndexError 。使用 heap[0] ,可以只访问最小的元素而不弹出它。

h e a p q . h e a p p u s h p o p ( h e a p , i t e m ) heapq.heappushpop(heap, item) heapq.heappushpop(heap,item)

将 item 放入堆中,然后弹出并返回 heap 的最小元素。该组合操作比先调用 heappush() 再调用 heappop() 运行起来更有效率。一般题目要求维持堆的大小不变。

h e a p q . h e a p r e p l a c e ( h e a p , i t e m ) heapq.heapreplace(heap, item) heapq.heapreplace(heap,item)

弹出并返回 heap 中最小的一项,同时推入新的 item。 堆的大小不变。 如果堆为空则引发 IndexError。这个单步骤操作比 heappop() 加 heappush() 更高效,并且在使用固定大小的堆时更为适宜。

合并*

h e a p q . m e r g e ( ∗ i t e r a b l e s , k e y = N o n e , r e v e r s e = F a l s e ) heapq.merge(*iterables, key=None, reverse=False) heapq.merge(iterables,key=None,reverse=False)

将多个已排序的输入合并为一个已排序的输出(例如,合并来自多个日志文件的带时间戳的条目)。 返回已排序值的 iterator。

最值

h e a p q . n l a r g e s t ( n , i t e r a b l e , k e y = N o n e ) heapq.nlargest(n, iterable, key=None) heapq.nlargest(n,iterable,key=None)

从 iterable 所定义的数据集中返回前 n 个最大元素组成的列表。 如果提供了 key 则其应指定一个单参数的函数,用于从 iterable 的每个元素中提取比较键 (例如 key=str.lower)。 等价于: sorted(iterable, key=key, reverse=True)[:n]。

h e a p q . n s m a l l e s t ( n , i t e r a b l e , k e y = N o n e ) heapq.nsmallest(n, iterable, key=None) heapq.nsmallest(n,iterable,key=None)

从 iterable 所定义的数据集中返回前 n 个最小元素组成的列表。 如果提供了 key 则其应指定一个单参数的函数,用于从 iterable 的每个元素中提取比较键 (例如 key=str.lower)。 等价于: sorted(iterable, key=key)[:n]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值