python-heapq-优先级队列-堆

本文探讨了在Python heapq库中调整元素优先级的方法。通过将元素的优先级值进行修改,并利用堆调整操作使元素向堆顶移动,实现元素优先级的动态更新。同时介绍了使用标记ID为-1来模拟元素删除,以及如何在队列长度检查中进行特殊处理,确保程序的正确运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://docs.python.org/2/library/heapq.html

 

heapq 是一个小堆(当然也可以通过变换优先级的值 变成大堆)

heapq 可以 压入 普通的整数 也可以 压入list 这样就能 优先级 附带其它属性了

heapq 本身 支持 push 和 pop 操作

 

但是如何 调整已经加入的元素的优先级值呢?

比如 将某个元素的优先级 调小, 使其向堆顶移动, 这里需要知道这个元素当前在堆的哪个位置,接着 执行 堆调整的交换操作,调整这个元素的位置

首先如何查找到元素的位置,这个就比较头痛,没想到办法让heapq在调整优先级的过程中同时记录元素的位置,如果不能这样快速的查找位置,那heapq就没有意义了

 

因此只能采用另外一种方式,类似于线性探测解决冲突的hash表所做的,将删除的元素 标记 ID 为-1 ,认为其被删除了, 在出队操作中, 对于已经被删除的元素则忽略, 接着将调整优先级的 新元素重新插入到队列里面去

 

但是存在一个问题, 这样不能通过简单的查看队列长度来判定队列是否为空, 需要封装一个pop操作来抛出异常, 同时在调用pop的时候 注意 捕获异常

 

 

转载于:https://my.oschina.net/u/186074/blog/88246

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值