python标准库--heapq堆队列算法

9 篇文章 0 订阅

这个模块提供了堆队列算法的实现,也称为优先队列算法。这个模块最常用的操作是将一个列表转换为一个堆,默认是小根堆(它的每个父节点的值都只会小于或所有孩子节点的值),而且常用的主要有三个方法:

① heapq.heappush(heap, item):将 item 的值加入 heap (一般为列表)中,并且保持堆的不变性,item可以为元组类型这样可以使用元组存储多个属性值
heapq.heappop(heap):弹出并返回 heap 的最小的元素,保持堆的不变性。如果堆为空,抛出 IndexError 。使用 heap[0] ,可以只访问最小的元素而不弹出它
heapq.heapify(x):线性时间内原地将list x 转换成堆

有的题目要求为大根堆这个时候在存储的时候可以将某个元素存储为负数,这样相当于维护的是一个大根堆

其余的方法可以参照官方的标准库文档,并且当堆中的元素为元组的时候会按照元组的第一个元素来维持小根堆,下面是具体的例子:

import heapq
if __name__ == '__main__':
    # 要创建一个堆, 可以使用list来初始化为[], 或者可以通过一个函数heapify(), 来把一个list转换成堆.
    h = []
    # 往堆中加入元素并且保证堆的不变性, 当加入堆中的元素为元组类型的时候按照元组的第一个参数维持堆的不变性
    heapq.heappush(h, (4, "a"))
    heapq.heappush(h, (2, "b"))
    heapq.heappush(h, (4, "c"))
    while len(h):
        # 弹出并返回heap的最小的元素, 保持堆的不变性
        print(heapq.heappop(h))

    h = [10, 6, 8, 3, 4, 1, 2, 7, 9, 5]
    # 将list转换成堆, 原地, 线性时间内
    heapq.heapify(h)
    print(h)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值